Bash で標準出力と標準エラーをファイルにリダイレクトする方法
Bash で標準出力 (stdout) と標準エラー (stderr) をファイルにリダイレクトする方法について説明します。
リダイレクトの基本
>
: 標準出力をファイルにリダイレクトします。ファイルが存在しない場合は新規作成されます。2>
: 標準エラーをファイルにリダイレクトします。
標準出力と標準エラーを同時にリダイレクトする方法
例
# 標準出力と標準エラーを "output.log" にリダイレクトする
command &> output.log
# 標準出力と標準エラーを "output.log" に追記する
command &>> output.log
# 標準出力を "stdout.log" に、標準エラーを "stderr.log" にリダイレクトする
command 1> stdout.log 2> stderr.log
# 標準出力を "stdout.log" に追記し、標準エラーを "stderr.log" に追記する
command 1>> stdout.log 2>> stderr.log
標準エラーのみをリダイレクトする方法
# 標準エラーを "error.log" にリダイレクトする
command 2> error.log
標準出力と標準エラーを無視する方法
# 標準出力と標準エラーを無視する
command > /dev/null 2>&1
備考
1
は標準出力、2
は標準エラーを表します。&1
は標準出力のファイル記述子を指定します。
Bash リダイレクトの例
# 標準出力と標準エラーを "output.log" にリダイレクトする
command &> output.log
この例では、command
の標準出力と標準エラーが両方とも output.log
ファイルにリダイレクトされます。ファイルが存在しない場合は新規作成され、存在する場合は追記されます。
# 標準出力を "stdout.log" に、標準エラーを "stderr.log" にリダイレクトする
command 1> stdout.log 2> stderr.log
この例では、command
の標準出力が stdout.log
ファイルに、標準エラーが stderr.log
ファイルにリダイレクトされます。
# 標準エラーを "error.log" にリダイレクトする
command 2> error.log
この例では、command
の標準エラーのみが error.log
ファイルにリダイレクトされます。
# 標準出力と標準エラーを無視する
command > /dev/null 2>&1
この例では、command
の標準出力と標準エラーがすべて捨てられます。
# 標準出力と標準エラーを "output.log" に追記する
command &>> output.log
標準出力と標準エラーをパイプで繋げる
# 標準出力を別のコマンドにパイプで渡す
command | another_command
この例では、command
の標準出力が another_command
の標準入力に渡されます。
リダイレクトの組み合わせ
これらのリダイレクト方法を組み合わせることで、さまざまな出力処理を実現することができます。例えば、標準エラーのみをログファイルにリダイレクトし、標準出力を別のプログラムにパイプで渡すといった処理も可能です。
exec コマンド
exec
コマンドを使用して、標準出力と標準エラーをファイルにリダイレクトすることができます。
exec 1> output.log 2>&1
このコマンドは、現在のシェルプロセスを新しいプロセスに置き換え、その新しいプロセスの標準出力と標準エラーを output.log
ファイルにリダイレクトします。
tee コマンド
command | tee stdout.log 2>&1
このコマンドは、command
の標準出力を stdout.log
ファイルに書き込むと同時に、標準出力と標準エラーをパイプで繋げて次のコマンドに渡します。
シェルスクリプトでのリダイレクト
シェルスクリプト内でリダイレクトを使用することもできます。
#!/bin/bash
# 標準出力と標準エラーを "output.log" にリダイレクトする
command &> output.log
このスクリプトを実行すると、command
の標準出力と標準エラーが output.log
ファイルにリダイレクトされます。
シェルオプション
set -o append
command > output.log 2>&1
このコマンドは、シェルオプション append
を設定し、command
の標準出力と標準エラーを output.log
ファイルに追記します。
logrotate ツール
logrotate
ツールを使用して、ログファイルを自動的に回転させることができます。
/etc/logrotate.d/mylog
このファイルにログファイルの回転ルールを定義し、定期的に logrotate
コマンドを実行することで、ログファイルを管理することができます。
bash append stdout