次のスクリプトで「サブコマンド」の出力をインデントしようとしています。
Turning off image...
Unmounting...done.
Detaching loop device...done
インデントされた項目は、プロセス中に実行されるステップですTurning off image...
。
標準的な解決策はsed
etを使用することです。他。絵この問題ただし、私のスクリプトの一部のステップでは、ユーザーに確認操作を求めるプロンプトを表示する必要がありますread
。プロンプトは改行文字で終わらないため、sed
コマンドが完了するまで出力はありませんread
。解決策はありますか?
言う:サブコマンドの1つ自体がread
プロンプトを使用して呼び出されます。サブコマンドsed
がパイプされるとsed
改行文字で終わらなかったため、プロンプトは出力されません。
以下はサンプルコードです(意味を強調するために少し意図したものです)。
function indent () { (set -o pipefail; "$@" 2>&1 | sed 's/^/ /';); }
function some_cleanup () {
# ... some commands
read -rp "Do you want to force a dismount? (y/n)" yesno
if [ "$yesno" = "yes" ]; then force_dismount; fi
}
indent some_cleanup