Unix Linux中的輸入輸出重定向

2021-05-24 08:28:02 字數 1350 閱讀 5736

linux shell 環境中支援輸入輸出重定向,用符號《和》來表示。0、1和2分別表示標準輸入、標準輸出和標準錯誤資訊輸出,可以用來指定需要重定向的標準輸入或輸出,比如 2>a.txt 表示將錯誤資訊輸出到檔案a.txt中。

同時,還可以在這三個標準輸入輸出之間實現重定向,比如將錯誤資訊重定向到標準輸出,可以用 2>&1來實現。

linux下還有乙個特殊的檔案/dev/null,它就像乙個無底洞,所有重定向到它的資訊都會消失得無影無蹤。這一點非常有用,當我們不需要回顯程式的所有資訊時,就可以將輸出重定向到/dev/null。

如果想要正常輸出和錯誤資訊都不顯示,則要把標準輸出和標準錯誤都重定向到/dev/null, 例如:

# ls 1>/dev/null 2>/dev/null

還有一種做法是將錯誤重定向到標準輸出,然後再重定向到 /dev/null,例如:

# ls >/dev/null 2>&1

注意:此處的順序不能更改,否則達不到想要的效果,此時先將標準輸出重定向到 /dev/null,然後將標準錯誤重定向到標準輸出,由於標準輸出已經重定向到了/dev/null,因此標準錯誤也會重定向到/dev/null,於是一切靜悄悄:-)

如果指令碼不能自動地將輸出傳送到檔案的話,可以利用 bash shell 的一些函式來捕獲所執行指令碼的輸出,如:

./test  2>&1  | tee test.out

讓我們來分析上面的命令:

"2>&1" 命令:

使用 "2>&1" 將標準錯誤重定向到標準輸出。字串 "2>&1" 表明任何錯誤都應送到標準輸出,即 unix/linux 下 2 的檔案標識代表標準錯誤,而 1 的檔案標識代表標準輸出。如果不用此字串,那麼所捕捉到的僅僅是正確的資訊,錯誤資訊會被忽略。

管道 "|" 和 "tee" 命令:

unix/linux 程序和簡單的管道概念很相似。既然這樣,可以做乙個管道將期望指令碼的輸出作為管道的輸入。下乙個要決定的是如何處理管道所輸出的內容。在這種情況下,我們會將它捕獲到輸出檔案中,在此示例中將之稱為 "test.out"。

但是,除了要捕獲到輸出結果外,我們還想監視指令碼執行時產生的輸出。為達到此目的,我們連線允許兩件事同時進行的 "tee" (t- 形管道):將輸出結果放在檔案中同時將輸出結果顯示在螢幕上。 其管道類似於:

process --> t ---> output file|v

screen

如果 只 想捕獲輸出結果而不想在螢幕上看到輸出結果,那可以忽略多餘的管道: ./test  2>&1 > test.out

假若這樣,相類似的管道如下:

process --> output file

# 要注意: tee 後接的檔案會被覆蓋,所以,我們要加上 -a 這個引數才能將訊息累加。

python中輸入輸出

1.基本形式輸出 print 2.格式化輸出 格式符號 轉換 c字元 s通過str 字串轉換來格式化 i有符號十進位制整數 d有符號十進位制整數 u無符號十進位制整數 o八進位制整數 x十六進製制整數 小寫字母 x十六進製制整數 大寫字母 e索引符號 小寫 e e索引符號 大寫 e f浮點實數 g ...

C C 中的輸入輸出

1.scanf與getchar 一般情況下,比如在沒有格式控制符的情況下,scanf是不能清除緩衝區的內容也就是說當遇到enter,space,tab鍵結束的時候,這3個鍵會放到緩衝區中。同樣,getchar也不能吃掉緩衝區中的內容,但是一般在有些程式用getchar做讀入字元來暫停程式,不過如果之...

Fortran中的輸入輸出!!!

我們學習計算機語言的目的在於與計算機進行互動 輸入即向計算機傳送指令,輸出即計算機對我們傳送的指令做出的響應 所以互動的前提首先要搞清程式語言的輸入輸出 輸入輸出方法有 write print read 我們需要在輸入輸出語句中提供三方面的資訊 1 通過什麼裝置進行輸入輸出 2 採用的輸入輸出格式 ...