回到網頁內容 臺灣-繁體中文
HP.com 首頁 產品資訊 支�#169;及驅動程式 解決方案 如何購買
» 聯絡 HP
進階選項
HP.com 首頁
使用HP-UX: HP 9000電腦 > 第 3 章. 使用Shell

瞭解標準輸入、標準輸出和標準錯誤

» 

技術文件

PDF 格式的完整書籍
» 回饋意見
內容©韟像B開©l

 » 目錄

 » 辭彙

 » 索引

每一個處理程序會開啟三個標準的「檔案」:標準輸入 (stdin)、標準輸出 (stdout) 和標準錯誤 (stderr)。程式使用如下:

  • 標準輸入是程式預期讀取其輸入的位置。根據預設值,處理程序從鍵盤讀取stdin

  • 標準輸出是程式寫入其輸出的位置。根據預設值,處理程序把stdout寫入終端機的螢幕上。

  • 標準錯誤是程式寫入其錯誤訊息的位置。根據預設值,處理程序把stderr寫入終端機的螢幕上。

下圖說明處理程序與這些檔案的關係。

圖 3-1 標準輸入、標準輸出和標準錯誤

標準輸入、標準輸出和標準錯誤

將標準輸出寫入檔案

shell讓您把處理程序的標準輸出自螢幕 (預設) 重新指向檔案。重導輸出的方向,讓您得以將命令所產生的文字儲存在檔案中;同時也可便利地選擇程式所使用的檔案或裝置 (如印表機)。

最簡單的命令語法格式如下:

stdout

command > outfile

其中,command是重導其輸出的命令,而outfile是處理程序寫入標準輸出的檔案名稱。如果輸出檔案已經存在,其原先的內容會遺失。如果檔案不存在,則會建立一個新檔。

若要附加輸出到現存檔案,請使用兩個大於符號 (>>) 指向要附加上去的檔案。

下圖說明當輸出重導至檔案時,stdinstdoutstderr的去處。

圖 3-2 輸出重導時的標準輸入、輸出和錯誤

輸出重導時的標準輸入、輸出和錯誤

下面的例子顯示使用who命令的輸出重導;此who命令將列示目前登入系統的使用者。輸出被重導至檔案whoison,而不將使用者顯示在終端機的螢幕上。

who(1)

$ who > whoison  輸出內容附加到whoison中。
$ more whoison 顯示whoison的內容。
pat    console  Oct 9 08:50  
terry  tty01    Oct 9 11:57  
kim    tty02    Oct 9 08:13  

使用檔案作為標準輸入

shell可讓您改變處理程序的標準輸入方向,亦即,可從檔案而非從鍵盤讀取輸入。若要改變處理程序的輸入方向,請使用指向命令名稱的小於符號 (<) 分開命令和輸入檔案名稱。任何可讀取由 stdin (您的鍵盤)輸入的命令,皆能加以輸入重導。

最簡單的命令語法格式如下:

stdin

command < infile

其中,command是重導其輸入的命令,而infile是處理程序讀取標準輸入的檔案名稱。檔案必須存在,重導才會成功。

下圖說明當輸入方向改為從檔案輸入時,stdinstdoutstderr的去處。

圖 3-3 輸入重導時的標準輸入、輸出和錯誤

輸入重導時的標準輸入、輸出和錯誤

在下面的範例中,who命令的標準輸出被重導至savewho檔案。接下來,more命令顯示savewho的內容。最後,wc (word count)命令的標準輸入改為由savewho檔案輸入:

使用「>」

$ who > savewho 輸出重導至savewho檔案
more savewho 顯示savewho的內容
pat   console Oct 9 08:50  
terry tty01   Oct 9 11:57  
kim   tty02   Oct 9 08:13  

使用「<」

$ wc -l < savewho 輸入方向重導自savewho檔案輸入
4 結果

在前面的例子中,有-l選項的wc命令會計算輸入檔案中的行數。因為輸入方向已改為自savewho檔案輸入,所以結果和執行who命令時所得之登入系統使用者的人數一樣。

重導標準輸入和標準輸出的方向

您可以重導一個單一命令的標準輸入與標準輸出。不過,標準輸入和標準輸出請不要使用相同的檔案名稱,否則輸入檔案的原有內容會遺失。

下圖說明當輸出和輸入起迄的檔案改變時,stdinstdoutstderr被導向之處。

圖 3-4 重導輸入和輸出的方向

重導輸入和輸出的方向

使用預設的標準輸入和標準輸出

以下的例子使用sort命令排序由鍵盤鍵入的文字。鍵入CTRL-D結束標準輸入。以下的範例為顯示在終端機螢幕上的標準輸出:

sort(1)
$ sort
muffy           
happy           
bumpy           
CTRL-D          結束標準輸入。
bumpy           
happy           
muffy           結束標準輸出。

重導標準輸入的方向

在以下的例子中已重導輸入的方向:

$ more socks  顯示socks的內容。
polka dot      
argyle         
plaid           
$ sort < socks  改從socks輸入並將內容排序。
argyle
plaid           
polka dot      

在前面的例子中,sort命令使用socks檔案作為輸入。標準輸出顯示在終端機的螢幕上。

使用標準輸入和標準輸出重導

下一個例子將合併輸入和輸出重導:

$ sort < socks > sortsocks 使用輸入和輸出重導。
$ more sortsocks 顯示sortsocks的內容。
argyle                     
plaid
polka dot

在這個例子中,sort命令從socks檔案讀取輸入,並且將輸出寫入sortsocks檔案;因此,標準輸出 (不像前兩個例子) 不會顯示在您的螢幕上。

導引命令輸出和輸入

shell可讓您連接二或多個處理程序,使得一個處理程序的標準輸出可做為另一個處理程序的標準輸入。處理程序之間的連接稱為導引(pipe)。若要導引一個處理程序的輸出到另一個處理程序,請用垂直線 (|) 來分開命令。以下為導引的一般語法:

command1 | command2

command1是將此命令的標準輸出重導或導引至另一個命令,而command2是此命令的標準輸入讀取先前命令的輸出。您可以將二或多個命令結合成單一的導引線。每一個連續命令的輸出,都被導引為命令行中下一個命令的輸入。

command1 | command2 | ... | commandN

在以下的例子中,who命令的輸出再次儲存於檔案savewho中。然後,savewho檔案則做為wc命令的輸入:

wc(1)

$ who > savewho     who命令的輸出重導至檔案savewho。
$ wc -l < savewho 檔案savewho的輸出重導至wc命令。
4    範例結果。

利用導引線,這兩個命令合而為一:

$ who | wc -l
4

如例子所示,使用導引則不再需要暫時的中間檔案。相反地,第一個命令的標準輸出直接送達第二個命令,做為該命令的標準輸入。

使用有導引的tee命令

tee命令讓您將在命令之間傳遞的資料副本轉移至一個檔案,而不改變導引的功能。以下的例子使用who命令來得知系統上的人員。下圖中有進一步的說明:who命令的輸出被導引至tee命令;而tee命令將輸出的副本儲存在檔案savewho中,並且將未改變的輸出傳給wc命令:

tee(1)
$ who | tee savewho | wc -l
4
$ more savewho
pat        console      Oct  9 08:50
terry      tty01        Oct  9 11:57
kim        tty02        Oct  9 08:13

圖 3-5 有導引以及tee命令的標準輸入和輸出

有導引以及tee命令的標準輸入和輸出

若需相關資訊...

HP-UX提供可應用於導引中的過濾程式。這些程式可以接受文字做為輸入,進行轉換後,再產生文字輸出。過濾命令包括adjustawkmorecutgrepheadprrevsedsortspelltail。若需這些命令的相關資訊,請參閱相關的線上援助頁。

可列印版本
隱私權聲明 使用範圍與著作權聲明
© Hewlett-Packard Development Company, L.P.