Shell

解碼“prog > 文件 2>&1”

  • July 23, 2014

我在理解這個結構時遇到了一些困難prog > file 2>&1。我讀過它的意思是“將標準輸出標準錯誤發送到文件”。但我的問題是如何?

我知道prog > file基本上將標準輸出發送到文件。我也明白這prog 2>&1意味著應該將stderr發送到stdout。但我無法為 prog > file 2>&1. 這裡的專家可以幫我解碼嗎?

你只需要從左到右閱讀它:

  • > file–> 將所有東西從stdoutto重定向file。(你可以想像你有一個連結,點對點 from stdoutto file
  • 2>&1–> 將所有東西從stderrto重定向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.

引用自:https://unix.stackexchange.com/questions/146186