Linux:標準輸入、輸出、錯誤
阿新 • • 發佈:2019-01-02
1、檔案描述符
檔案 | 檔案描述符 |
輸入檔案 | 0 |
輸出檔案 | 1 |
錯誤輸出檔案 | 2 |
2、將標準輸出和錯誤輸出重定向到同一個檔案:2>&1
[email protected]:~/mybash$ cat test.sh
#/usr/bin/bash
name=kevin
echo $name
ipconfig
[email protected]:~/mybash$ ./test.sh > run.log
./test.sh: line 5: ipconfig:找不到命令
[email protected]:~/mybash$ ./test.sh > run.log 2>&1
[email protected]:~/mybash$ cat run.log
kevin
./test.sh: line 5: ipconfig:找不到命令
[email protected]:~/mybash$
3、將錯誤單獨輸出到檔案
[email protected]:~/mybash$ ./test.sh 2>err.log
kevin
[email protected]:~/mybash$ cat err.log
./test.sh: line 5: ipconfig:找不到命令
[email protected]:~/mybash$
4、將錯誤輸出到系統垃圾箱/dev/null,從而錯誤不出現在命令列介面上
[email protected]:~/mybash$ ./test.sh 2>/dev/null
kevin
[email protected]:~/mybash$
1.Linux常用的有:
1) 標準輸入 stdin 程式碼為0,使用< 或<<
2) 標準輸出 stdout 程式碼為1,使用> 或 >> ,這裡把1給省略了,
3) 標準錯誤輸出 stderr程式碼為2,使用 2> 或2>>
其中:標準輸出指的是『命令執行所回傳的正確的資訊』,而標準錯誤輸出可理解為『命令執行失敗後,所回傳的錯誤資訊』
2.如果想讓資訊都不展示,則將輸入到黑洞垃圾桶/dev/null,不輸出錯誤資訊2>/dev/null
3.標準輸出標準錯誤輸出都放在同一個檔案,就這樣做:
1)都重定向到標準輸出通道&1:2>&1,都重定向到標準錯誤輸出通道1>&2,可以簡寫為>&2,還可以是 >& 這裡的&可以理解成”the same as”
為何2>&1要寫在後面?
index.php task testOne >/dev/null 2>&1
我們可以理解為,左邊是標準輸出,好,現在標準輸出直接輸入到 /dev/null 中,而2>&1是將標準錯誤重定向到標準輸出,所以當程式產生錯誤的時候,相當於錯誤流向左邊,而左邊依舊是輸入到/dev/null中。
可以理解為,如果寫在中間,那會把隔斷標準輸出指定輸出的檔案
你可以用
ls 2>1測試一下,不會報沒有2檔案的錯誤,但會輸出一個空的檔案1;
ls xxx 2>1測試,沒有xxx這個檔案的錯誤輸出到了1中;
ls xxx 2>&1測試,不會生成1這個檔案了,不過錯誤跑到標準輸出了;
ls xxx >out.txt 2>&1, 實際上可換成 ls xxx 1>out.txt 2>&1;重定向符號>預設是1,錯誤和輸出都傳到out.txt了。