シェル ファイルの出力だけでなく、内部で使用されたコマンドもログに記録する簡単な方法はありますか?
例えば:
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
ターミナルのトランスクリプトなので、バックスペースはまたは^?
(またはターミナルのバックスペース)として表示されます。