こんにちは、コマンドの出力と出力を生成するために実行したコマンドを同じファイルに保存したいと思います。私はその一つを理解しています
*some_command* > file.txt
*some_command* | tee file.txt
できますが、どちらの場合もいくつかのコマンド ファイルに保存されず、出力のみが保存されます。これを行う方法はありますか?
答え1
コマンドを配列に保存、印刷、実行できます。
# Define command
mycmd=(some_command -o "some option")
# Print command
echo "${mycmd[@]}"
# Run command
"${mycmd[@]}"
これは、コマンドを印刷するときに引用符を削除することに注意してください。
関数に入れてみてください:
lognrun(){ echo "$@"; "$@"; }
lognrun some_command -o "some_option" > logfile
答え2
次のようにサブシェルを使用しますset -x
。
$ ( set -x; printf '%s\n' a b "c d"; ) 2>&1 | tee logfile
+ printf '%s\n' a b 'c d'
a
b
c d
答え3
「script」コマンドを使用するのはどうですか?
$ script logfile
$ somecommand
lots of command output...
これにより、シェルが実行するすべての操作がログファイルに書き込まれます。停止するにはCtrl + Dを押します。
コマンドが1つだけ必要な場合は、-cオプションを使用できます。
-c, --command コマンド 対話型シェルの代わりにコマンドを実行してください。 これにより、スクリプトはプログラムの出力を簡単にキャプチャできます。 標準出力がttyでない場合、動作は異なります。