[linux] 輸入&輸出&錯誤流

輸入&輸出&錯誤流

Linux中有三種標準輸入輸出,分別是STDIN,STDOUT,STDERR,對應的數字分別是0,1,2。

標準 數字 含義
STDIN 0 標準輸入,默認從鍵盤讀取資訊
STDOUT 1 標準輸出,默認將輸出結果輸出至終端
STDERR 2 標準錯誤,默認將輸出錯誤輸出至終端

STDOUT與STDERR都會默認顯示在終端上, 數字1和2用於區分二者資訊

重定向

為什麼要重定向
由上表可以看出,三種標準流都有默認的輸入或輸出設備。然而在實際工作中,輸入資訊或輸出資訊需要來自或輸出到指定的源(文件),此時需要將標準輸入或輸出重定向。

重定向符號

  • 輸入重定向(替代系統提供的標準輸入埠-鍵盤,指定輸入文件)
    符號 ‘<‘
wc -l < test.txt #統計test文件的行數
  • 輸出重定向 (替代系統提供的標準輸出埠-顯示器,指定輸出文件)
    符號 ‘>’ 或 ‘>>’
echo 'OK' > test.py # 以'覆蓋'的方式輸出  
echo 'OK' >> test.py # 以'追加'的方式輸出

輸出重定向符號應為’1>’或’1>>’, 但是一般1可省略,故常用’>’|’>>’

  • 錯誤重定向 (同輸出重定向類似,不同的是重定向符號前面要加2,代表標準錯誤。)
    符號 ‘2>’ 或 ‘2>>’
    舉例:在終端輸入錯誤命令echoo,系統會輸出錯誤資訊,可以將此錯誤資訊輸出到test文件
echoo 'ok' 2> test.txt 

# 列印test文件中的錯誤資訊
cat test.txt
Command 'echoo' not found, did you mean:

  command 'echo' from deb coreutils (8.30-3ubuntu2)

Try: sudo apt install <deb name>

兩個常用符號

  • ‘2>&1’
    將標準錯誤的重定向等同於標準輸出的重定向
echoo "OK" > test.txt 2>&1 # 此例錯誤重定向到了test.txt
  • ‘&>’
    不區分標準輸出1還是標準錯誤2
echoo "OK" &> test.txt #無論資訊為1或2都重定向到test.txt文件中