相關(guān)軟件 >Unix shell 淺講 創(chuàng)建者:webmaster 更新時(shí)間:2005-07-02 01:09 1. 輸出入轉(zhuǎn)向 在 UNIX 中,每一個(gè) process 均有三個(gè)特殊的 file descriptor , 標(biāo)準(zhǔn)輸入( standard input )、標(biāo)準(zhǔn)輸出 ( standard output )、標(biāo)準(zhǔn)錯(cuò)誤輸出( standard error )。這三個(gè)平常是接受 terminal 的輸入,而由 terminal 顯示出去。但是UNIX 提供使用者可以使用一般的檔案或 pipe 來(lái)取代這些標(biāo)準(zhǔn)輸出入設(shè)備。在tcsh 里頭,使用者可以利用">"和"<"來(lái)進(jìn)行輸出入轉(zhuǎn)向的工作。 輸出轉(zhuǎn)向: command > file 你可以將一個(gè)指令的輸出結(jié)果轉(zhuǎn)向到一個(gè)檔案,讓此檔案儲(chǔ)存這個(gè) command的輸出結(jié)果。 但是請(qǐng)注意,如果 file 已經(jīng)存在在系統(tǒng)中,則 file 將會(huì)被蓋過(guò)。也就是原先 file 的內(nèi)容將會(huì)消失。 command >& file 與 > 相同,但是這個(gè)格式表示連 standard error 一起轉(zhuǎn)向。在 UNIX 中,standard error 在 programer 的習(xí)慣是用來(lái)顯示 error 的發(fā)生,因此如果沒(méi)有被轉(zhuǎn)向時(shí), standard output 的結(jié)果將會(huì)被轉(zhuǎn)向到 file ,而 standard error 的結(jié)果仍將顯示在 terminal 上。 command >> file 此格示代表將 standard output 的結(jié)果 append 到 file 中。如果 file 已存在在系統(tǒng)中,則 standard output 的結(jié)果將會(huì)加到 file 的末端,如果 file原先并不存在,則 file 將會(huì)被開(kāi)啟而將 standard output 的結(jié)果存至 file中。 command >>& filE 同上,不過(guò)此格式代表連 standard error 一起 append 到 file 之中。 輸入轉(zhuǎn)向 command < file 一般程式須要自終端機(jī)輸入資料,而你可以將程式所要輸入的資料統(tǒng)一編入檔案中,利用轉(zhuǎn)向一并輸入。 set ignoreeeof 由於轉(zhuǎn)向輸出會(huì)有將現(xiàn)有檔案 overwrite 的危險(xiǎn),csh 與 tcsh 提供使用者一個(gè)方式來(lái)避免。 當(dāng)你執(zhí)行 set ignoreeeof 之後,如有輸出轉(zhuǎn)向到已存在之檔案時(shí),它會(huì)發(fā)出一個(gè)檔案已存在的訊息。 而在處理 append 轉(zhuǎn)向上,如果已經(jīng) set ignoreeeof ,則當(dāng)要 append 一個(gè)不存在的檔案,將會(huì)出現(xiàn)一個(gè) error messege 。 然而如果我們當(dāng)真是要轉(zhuǎn)向蓋過(guò)一個(gè)已存在的檔案,或者是要 append 一個(gè)不存在的檔案時(shí),又要如何呢? 我們只要在 ">" ">&" ">>" ">>&" 後面加上驚嘆號(hào)"!",成為 ">!" , ... 就可以了。 2. Pipe 如同前面說(shuō)的轉(zhuǎn)向,Pipe 也是在標(biāo)準(zhǔn)輸出入和標(biāo)準(zhǔn)示誤裝置間作取代動(dòng)作,如此一來(lái)可以將某一個(gè)程式的輸出連到另一個(gè)程式的輸入中。其語(yǔ)法如下: command1 | command2 [ | command3 ....] command1 |& command2 [ |& command3 ....] <--- 連 standard error 一起 pipe 3. 前景與背景 在 sh 下面,一個(gè)新產(chǎn)生的 process 可以經(jīng)由 command 後面的符號(hào)';'和'&'來(lái)分別前景和背景。如以下語(yǔ)法 command 這表示產(chǎn)生一個(gè) foreground 的 process ,你要等到它結(jié)束才能再下另一個(gè)指令。 command & 這樣表示產(chǎn)生一個(gè) background 的 process ,它會(huì)給你一個(gè)類似以下的訊息: [1] 21304 然後就出現(xiàn)下一個(gè)提示號(hào),以供你給下一個(gè)指令。然後在這個(gè) background 的process 結(jié)束的時(shí)候再給你一個(gè)如下面的訊息,告訴你它把這個(gè) process 執(zhí)行完畢了。 [1] Done command command1 ; command2 ; command3 這樣表示你要求系統(tǒng)連續(xù)執(zhí)行 command1 , command2 , command3 三個(gè)指令,其中 command2 要等待 command1 , command3 要等待 command2 ,而你要等待 command3 執(zhí)行完畢才能下指令。 command1 & command2 & command3 & 這樣表示你要求系統(tǒng)連續(xù)執(zhí)行 command1 , command2 , command3 三個(gè)指令,而這三個(gè)指令都放在背景執(zhí)行,彼此之間不需等待。 fg 與 bg 也許你會(huì)問(wèn),一個(gè)已經(jīng)執(zhí)行的 process 可不可以由前景換背景,或由背景換前景呢? 可以的。一個(gè)在前景執(zhí)行的 process ,你可以按 Ctl-Z 將 process 暫停,系統(tǒng)會(huì)給你一個(gè)訊息: Suspended 然後出現(xiàn)提示號(hào)。此時(shí)你可以使用 fg 將其恢復(fù)前景執(zhí)行,或按 bg 將其改為背景執(zhí)行。 而如果有一個(gè) background 的 process , 你也可以用 fg 指令將其呼叫到前景來(lái)。首先你需用 jobs 指令來(lái)觀查目前有多少在背景下的 proesses,然後根據(jù)它所顯示出來(lái)的 job id 來(lái)決定將那一個(gè) process 放到前景。如使用 % fg %3 # 將第三個(gè) job 放到 foreground 。 4. 別名 alias 在 csh 與 tcsh 中,提供 alias 的功能,使得使用者可以將常用卻冗長(zhǎng)的指令以其他 的名字存起,不過(guò)不須像儲(chǔ)存變數(shù)一樣要在前面加一個(gè)"$"。 alias 的格式: alias aliasname string .... alias aliasname 'string \!* string' 前面的一個(gè)格式是把 aliasname 直接用來(lái)取代後面的 string ,然後如有任何跟在後面的 argument 將會(huì)出現(xiàn)的其後。如下例: % alias la ls -Fa 例中的 la . 相當(dāng)於 ls -F . ,然而如果僅是如此并不足夠,因此有後面的另一種格式。後面的格式中的 \!* 代表將來(lái)會(huì)出現(xiàn)在 aliasname 後面的所有參數(shù),如下例: % alias dir 'ls -Flag \!* | more' 例中的 dir doc 相當(dāng)於 ls -Flag doc | more ,這樣可提供使用者在設(shè)計(jì)上更大的彈性。 5. tcsh 的初始設(shè)定檔 tcsh 有兩個(gè) initial 檔,一個(gè)是 $HOME/.tcshrc , 一個(gè)是 $HOME/.login 。 每一個(gè) tcsh 在被開(kāi)啟時(shí),它都會(huì)去執(zhí)行所有位於 .tcshrc 中的命令,因此你可以把所有的 alias , 變數(shù)設(shè)定都放到 .tcshrc 里面去。在tcsh 起動(dòng)的時(shí)候便會(huì)自動(dòng)的去執(zhí)行這些對(duì)於你的環(huán)境的初始設(shè)定。 .login 只有在 tcsh 本身是一個(gè) login shell 的時(shí)候才會(huì)執(zhí)行,它多半用來(lái)設(shè)定一些只需在 login 的時(shí)候要執(zhí)行的命令,如環(huán)境變數(shù)的設(shè)定,因環(huán)境變數(shù)在設(shè)定之後,只要是其子 process 均會(huì)取得其環(huán)境,因此不須在每次開(kāi)啟 shell 的時(shí)候都重覆執(zhí)行。 tcsh 另有一個(gè)結(jié)束設(shè)定檔,稱為 .logout ,是在每一個(gè) login shell 結(jié)束,logout 所要執(zhí)行的動(dòng)作,其編輯的方法跟 .login , .tcshrc 完全一模一樣。 source 指令 如果要重新執(zhí)行 .tcshrc 的內(nèi)容,可以利用 source 指令來(lái)達(dá)到,此時(shí)就相當(dāng)於把該檔案中的所有內(nèi)容重新在命令列輸入一遍。如下: % source .login 相關(guān)文章 本頁(yè)查看次數(shù):