シェルスクリプトから発生するすべてのアクティビティをファイルに記録する簡単な方法はありますか?
スクリプトがあります。エコーの「命令」などの出力や、他のプログラム出力を出力します。私はコマンドを知っています:
command | tee -a "$log_file"
そして
command >> logifle.log
私が求めているのは、ロギング用のシェルパラメータがあるのか、私が使用できるsetコマンドなどがあるのかということです。必要がなければ、ファイルに何十ものリダイレクトやTシャツを追加する必要はありません。私はまだ標準出力を取得したい-私はそれもログに記録したい:
通常foo.sh
を使用してスクリプトを実行する場合は、bash -x foo.sh
を使用して実行してみてください(bashスクリプトであると想定)。すべてをファイルにリダイレクトする場合は、bash -x foo.sh > file.log 2>&1
を試してください(stderrもリダイレクトしていることに注意してください。これが必要ない場合は、2>&1
を削除してください)。何が起こっているのかを確認したい場合は、bash -x foo.sh 2>&1 | tee log.file
。
非常に簡単で便利な方法があります。
script
を使用して、ターミナルセッションのTypeScriptを作成する
コマンドscript
を開始します
引数file
が指定されている場合、たとえばscript ~/tmp/output
、script
はダイアログをこのファイルに保存します。ファイル名が指定されていない場合、ダイアログはファイルTypeScript
に保存されます
スクリプトを開始します
スクリプトが終了したら、script
を経由して停止します Ctrl-D
デフォルトの出力ファイルTypeScript
の出力を確認します
script
を使用してコマンドを1ステップで開始するには、パラメーター-c
を使用します
-c COMMAND
Run the COMMAND rather than an interactive
Shell. This makes it easy for a script to capture
the output of a program that behaves differently
when its stdout is not a tty.
script
はシェルをフォークするか、新しいシェルを起動するため、スクリプト内でscript
を使用しても意味がありません。
変数Shellが存在する場合、「スクリプト」によって分岐されたシェルはそのシェルになります。 Shellが設定されていない場合、Bourne Shellが想定されます。 (ほとんどのシェルはこの変数を自動的に設定します)。