こんにちは私は、コマンドの出力と、出力を作成するために実行されたコマンドの両方を同じ単一のファイルに保存したいと思います。私はどちらかを理解しています
*some_command* > file.txt
*some_command* | tee file.txt
実行できますが、いずれの場合もsome_commandはファイルに保存されず、その出力のみが保存されます。そうする方法はありますか?
'script'-コマンドを使用するのはどうですか?
$ script logfile
$ somecommand
lots of command output...
これにより、シェルで行ったすべての操作がログファイルに記録されます。 Ctrl + Dで停止します。
1つのコマンドにのみ必要な場合は、「-c」オプションを使用できます。
-c、-command command 対話型シェルではなくコマンドを実行します。 これにより、スクリプトがプログラムの出力を簡単にキャプチャできるようになります stdoutがttyでない場合は、動作が異なります。
コマンドを配列に格納し、印刷して実行できます。
# Define command
mycmd=(some_command -o "some option")
# Print command
echo "${mycmd[@]}"
# Run command
"${mycmd[@]}"
これにより、コマンドを出力するときに引用符が削除されることに注意してください。
関数に入れます:
lognrun(){ echo "$@"; "$@"; }
lognrun some_command -o "some_option" > logfile
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