いくつかの環境パラメーターを設定してからc ++アプリケーションを実行するbashスクリプトを持っています。
C++アプリケーションは、実行時に現在の状態を示す情報を出力します。
現在、実行結果が表示されるのは、実行が終了してからです。 (約1分)とにかくbashスクリプトにアプリケーションからのライブ出力を表示させる方法はありますか?
これは私がこれまでに持っているものです:
OUTPUT="$(Sudo ./test_app -release)"
echo $OUTPUT
申し込みが完了すると、以下が表示されます。
release acknowledgereleasingstage1stage2released
コマンドラインから直接アプリケーションを実行した場合、アプリケーションが完了したときにすべてが1つになるのではなく、各プロセスが完了するたびに新しい行が表示されます。
release acknowledge
releasing
stage1
stage2
released
これを行う方法はありますか?ユーザーが複数のコマンドを実行する必要がないように、bashスクリプトからアプリを呼び出します。
ありがとう。
出力を表示し、保存する必要がない場合は、次のコマンドを実行します。
Sudo ./test_app -release
出力の保存と表示の両方が必要な場合は、 tee
を呼び出して出力を複製します。
OUTPUT=$(Sudo ./test_app -release | tee /dev/stderr)
出力をリダイレクトすると、アプリケーションは buffer 出力を行単位ではなく大きなチャンクで出力する場合があります。行ごとのデフォルトは、出力が端末である場合のみであり、パイプや通常のファイルではありません。これがアプリケーションに当てはまる場合は、 call unbuffer
またはstdbuff
です。 動作方法 のため、stdbuf
はSudoから呼び出す必要がありますが、buffer
はそのまま実行できます。
OUTPUT=$(Sudo stdbuf ./test_app -release | tee /dev/stderr)
OUTPUT=$(unbuffer Sudo ./test_app -release | tee /dev/stderr)
特定の理由で出力を保存する必要がないと仮定すると、単純に置き換えることができます。
OUTPUT="$(Sudo ./test_app -release)"
echo $OUTPUT
と
Sudo ./test_app -release
シェルコマンドでは、組み込みコマンドと非組み込みコマンド(基本レベル)に特別な違いはありません。それらはすべて実行し、出力します。