Shell
解碼“prog > 文件 2>&1”
我在理解這個結構時遇到了一些困難
prog > file 2>&1
。我讀過它的意思是“將標準輸出和標準錯誤發送到文件”。但我的問題是如何?我知道
prog > file
基本上將標準輸出發送到文件。我也明白這prog 2>&1
意味著應該將stderr發送到stdout。但我無法為prog > file 2>&1
. 這裡的專家可以幫我解碼嗎?
你只需要從左到右閱讀它:
> file
–> 將所有東西從stdout
to重定向file
。(你可以想像你有一個連結,點對點 fromstdout
tofile
)2>&1
–> 將所有東西從stderr
to重定向stdout
,現在指向file
.所以結論:
stderr --> stdout --> file
你可以在這裡看到一個很好的參考。
你錯過了什麼?你似乎什麼都明白了。將
> file
輸出發送到標準輸出file
並將2>&1
標準錯誤發送到標準輸出。最終結果是 stderr 和 stdout 都被發送到file
.為了說明,考慮這個簡單的 Perl 腳本:
#!/usr/bin/env perl print STDERR "Standard Error\n"; print STDOUT "Standard Output\n";
現在看看它的輸出:
$ foo.pl ## Both error and out are printed to the terminal Standard Error Standard Output $ foo.pl 2>file ## Error is redirected to file, only output is shown Standard Output $ foo.pl 1>file ## Output is redirected to file, only error is shown Standard Error $ foo.pl 1>file 2>&1 ## Everything is sent to file, nothing is shown.