Shellスクリプトですべてのコマンドの実行結果をログに配置する方法


Shellでは、自分のスクリプトの各コマンドの実行結果をカスタムログファイルに配置する方法をよく聞かれます.デフォルトでは、各コマンドが実行されると、標準出力は画面出力に指向され、標準エラーも画面出力に指向されますが、画面が点滅すると見えなくなります.>または>>>を使用すると、リダイレクトまたは追加リダイレクトは各コマンドの出力をログファイルに位置付けることができます.しかし、すべてのコマンドの出力結果を1つのファイルに指向するには、コマンドごとにリダイレクトする必要があります.非常に不便です.teeコマンドを使うのは、位置決め、コードを追跡するときに便利です.やはり目的が達成できず、この時はexecコマンドを使うのがとても便利です.
例:
#!/bin/bash
set -xv
exec 1>mylog 2>&1
free
df -h
pwd

最初の行はshebangで、shell便器に/binディレクトリのbashを使用してスクリプトをコンパイルするように伝えます.
2行目は、モードスイッチ-vをオンにします.shellが読み込んだ入力値を表示します.-x:命令を実行すると、その命令と下のパラメータが先に表示されます
3行目のexecコマンドは、コマンドを呼び出して実行するためのコマンドです.
  • execコマンドは通常shellスクリプトプログラムで使用され、他のコマンド
  • を呼び出すことができます.
  • 1>mylogは、標準出力をmylogファイルにリダイレクトする
  • です.
  • 2>&1は、標準エラーを標準入力に指向し、mylogに指向する、すなわち、標準入力と標準出力はmylogファイルの
  • に指向する.
    上のスクリプトを実行すると、後ろの3つのコマンドfree,df-h,pwdコマンドの実行結果をすべてmylogファイルに生産し、すべてのコマンドの実行結果を1つのファイルに保存する目的に達し、非常に便利です.