yw >outfile 2>&1$ cat outfile cat: oyyw: 沒有那個文件或目錄
和
$ cat oyyw 2>&1 >outfilecat: oyyw: 沒有那個文件或目錄
搜集了一部分資料以後,解答如下:
順序是很重要的!命令的執行是自左向右的,因此: * 對於第一個命令,shell首先讀到>outfile
(等同於1>outfile
),此時標准輸出
重定向到了文件outfile
,然後shell再讀到2>&1
,此時標准錯誤輸出
重定向到了標准輸出
,也就是重定向到了文件outfile
,所以得到的結果是標准輸出
和標准錯誤輸出
都重定向到了文件outfile
中
2>&1
,此時標准錯誤輸出
重定向到了標准輸出
(可能是控制台),然後shell再讀到>outfile
(等同於1>outfile
),此時標准輸出
重定向到了文件outfile
,得到的結果是標准錯誤輸出
輸出到了控制台,標准輸出
輸出到文件outfile
中以下這個例子,應該可以很好解答上面的疑問了:
$ cat learn_redirect.sh #!/bin/bashfoo() { echo "This is stdout"; # 輸出是標准輸出 echo "This is stderr" 1>&2; # 輸出是標准錯誤輸出}foo >errlog 2>&1 >outfile
[pms@jq-hadoop ~/workspace/ouyangyewei/learn_linux] eth0 = xxx$ sh learn_redirect.sh [pms@jq-hadoop ~/workspace/ouyangyewei/learn_linux] eth0 = xxx$ cat outfile This is stdout[pms@jq-hadoop ~/workspace/ouyangyewei/learn_linux] eth0 = xxx$ cat errlog This is stderr
foo >errlog 2>&1 >outfile
這一句命令,shell執行順序是從左向右。首先shell讀到>errlog
,此時標准輸出
重定向到了文件errlog
,然後shell讀到2>&1
,此時標准錯誤輸出
重定向到了標准輸出
(等同於標准錯誤輸出
重定向到了文件errlog
),然後shell讀到>outfile
,此時標准輸出
重定向到文件outfile
,因此,得到的結果是標准錯誤輸出
輸出到文件errlog
中,標准輸出
輸出到了文件outfile
中
http://www.gnu.org/software/bash/manual/bash.html#Redirections http://mywiki.wooledge.org/BashFAQ/055 http://docstore.mik.ua/orelly/unix/upt/ch45_21.htm http://docstore.mik.ua/orelly/unix/upt/ch08_13.htm
http://xxxxxx/Linuxjc/1184720.html TechArticle