実行されたコマンドをログファイルに出力とともに表示する

実行されたコマンドをログファイルに出力とともに表示する

シェル ファイルの出力だけでなく、内部で使用されたコマンドもログに記録する簡単な方法はありますか?

例えば:

whoami > who.dmp

次のような内容のファイルが出力されます:

my_username

より長いシェルファイルの場合、ログファイルにも結果の原因となったコマンドを表示する最も効果的な方法は何ですか?

元:

log.txt
###############

echo whoami  <- I want this to show in the file as well
my_username

time   <- I want this to show in the file as well

real    0m0.00s
user    0m0.00s
sys     0m0.00s

毎回コマンドを出力ファイルにエクスポートするハードコーディングを行わずに、これを実行する方法はありますか?

答え1

シェルの組み込みを使用するのが、set -xおそらくこれを実行するための最も安上がりな方法です。シェル スクリプトでは、次のような行がよく見られます。

#set -x

誰かがコメントアウトしただけで残したものです。対話型コマンド ラインで使用できると思いますが、そこでの動作が気に入らないかもしれません。

答え2

呼び出したプログラム (デフォルトではシェル) を終了するまで、ターミナル セッション全体を保存するツールを調べることができますscript。使用例:

~/:$ スクリプトテスト.出力
スクリプトが開始されました。出力ファイルは test.output です。
~/:$ mkdirの例
~/:$ cd の例
~/example/:$ touch new\ file.txt
~/例:/$ ls
新しいファイル.txt
~/例:/$ 終了

ファイルの内容はtest.output次のようになります。

スクリプトは 2012 年 6 月 25 日月曜日 16:24:28 に開始されました
~/:$ mkdirの例
~/:$ cd の例
~/example/:$ touch new\ file.txt
~/example/:$ ls
新しいファイル.txt
~/example/:$ 終了

スクリプトは 2012 年 6 月 25 日月曜日 16:24:41 に作成されました

このファイルは完了^Hターミナルのトランスクリプトなので、バックスペースはまたは^?(またはターミナルのバックスペース)として表示されます。

関連情報