[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文件中