記事ディレクトリ
1. 展望
シェルでスクリプトを呼び出してバックグラウンドで実行すると、実行中のログ ファイルが .log ファイルに書き込まれます。 2>&1は .log の後に追加されることが多く、最後の **&** はこのコマンドをバックグラウンドで実行することを意味します。
nohup sh /root/model_name/script/black_table_stat.sh > /root/model_name/log/black_table_stat_1_$(date +"%Y%m%d%H").log 2>&1 &
次に、Linux の 0、1、2 の意味を理解する
名前 | コード | オペレーター |
---|---|---|
標準入力 | 0 | < または << |
標準出力 | 1 | >、>>、1>または1>> |
標準エラー出力 | 2 | 2> または 2>> |
例:
現在のディレクトリに test.txt ファイルはありますが、b.txt ファイルはありません。
[wqf@b1i10 ~]$ ls test.txt
test.txt
[wqf@b1i10 ~]$ ls b.txt
ls: cannot access b.txt: No such file or directory
正常な内容はファイル file.out に出力され、エラーの内容はファイル file.err に出力されます。
[wqf@b1i10 ~]$ ls test.txt b.txt 1>file.out 2>file.err
[wqf@b1i10 ~]$ cat file.out
test.txt
[wqf@b1i10 ~]$ cat file.err
ls: cannot access b.txt: No such file or directory
3. 各種リダイレクトの意味
1. 2>&1の意味
意味:標準エラー出力を標準出力にリダイレクトする
記号 >& はリダイレクト記号で、標準エラー出力が標準出力に追加されることを示します。
1.
元々は1(標準出力)が画面に出力されている
2、>logを実行し、1(標準出力)をログファイルに出力
3、2>&1を実行、1に2(標準出力)を加える(標準出力)、1 (標準出力) はログ ファイルに出力されるため、2 (標準エラー出力) もログを指します。
例えば:
nohup sh /root/model_name/script/black_table_stat.sh > /root/model_name/log/black_table_stat.log 2>&1 &
black_table_stat.log を表示すると、通常の出力内容とエラー出力内容の両方があることがわかります。
2.&>fileの意味
1 (標準出力) と 2 (標準エラー出力) の両方をファイル file にリダイレクトします。これは **>log 2>&1** と同じ意味です。
例えば:
nohup sh /root/model_name/script/black_table_stat.sh > /root/model_name/log/black_table_stat_1_$(date +"%Y%m%d%H").log 2>&1 &
## 可以简写为以下:
nohup sh /root/model_name/script/black_table_stat.sh &> /root/model_name/log/black_table_stat_1_$(date +"%Y%m%d%H").log &
セマンティクスに違いはありません。通常は最初のタイプを使用します。通常は最初のタイプを使用します。">log 2>&1"
3. 1>&2の意味
意味:標準出力を標準エラー出力にリダイレクトする
記号 >& はリダイレクト記号で、標準エラー出力が標準出力に追加されることを意味します。
これは次のように理解できます。
1. 本来は 1 (標準出力) が画面に出力されます。
2. >logを実行し、ログファイルに1(標準出力)を出力します。
3. 1>&2 を実行し、2 (標準エラー出力) がまだ画面を指しているため、1 (標準出力) を 2 (標準エラー出力) に加算します。
ターミナルでコマンドエラー画面を入力するとエラーが報告されますが、画面上でエラー報告が表示される場所が標準エラー出力チャンネル2とみなすことができます。
例えば:
[wqf@b1i10 ~]$ sh /apps/summary_fz_province/test.sh > /apps/summary_fz_province/test.log 1>&2
$*=
$@=
print each param from
print each param from
結果を実行し、test.log に何もないことを確認すると、test.sh を実行した通常の内容が画面に出力されます。
4. /dev/nullの意味
/dev/null は、書き込みが破棄される特殊なファイルであり、読み取りを試みても何も読み込まれません。
標準出力と標準エラー出力をブロックしたい場合は、次のように記述できます。
command > /dev/null 2>&1
1.
本来は1(標準出力)が画面に出力される
2. > /dev/nullを実行し、1(標準出力)が/dev/nullファイルに出力される
3. 2>&1を実行し、 1 (標準出力) は /dev/null ファイルに出力されるため、2 (標準エラー出力) も /dev/null を指します。