一部の行が含まれていても出力をインデントします。

一部の行が含まれていても出力をインデントします。

次のスクリプトで「サブコマンド」の出力をインデントしようとしています。

Turning off image...
    Unmounting...done.
    Detaching loop device...done

インデントされた項目は、プロセス中に実行されるステップですTurning off image...

標準的な解決策はsedetを使用することです。他。絵この問題ただし、私のスクリプトの一部のステップでは、ユーザーに確認操作を求めるプロンプトを表示する必要があります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

ベストアンサー1

おすすめ記事