跳轉到內容

Unix 指南/解釋/管道和作業控制

來自華夏公益教科書,開放的書籍,開放的世界
Clipboard

待辦事項


管道和重定向

[編輯 | 編輯原始碼]

我們可以將命令的標準輸入、輸出和錯誤連線到其他命令或檔案。

   |    字元稱為 管道,它允許將它之前的命令的輸出重定向到它之後的命令(而不是作為標準輸出顯示)。

   >    字元是“Shell 重定向功能”,它將它之前的命令的輸出重定向到該字元後面的檔名稱。如果檔案已存在,那麼    >    字元將導致檔案的內容被重定向到它的新內容覆蓋。另一種方法是使用    >>    字元對,它將重定向的內容附加到檔案,而不是覆蓋檔案以前的內容。


作業控制

[編輯 | 編輯原始碼]

您可以同時執行多個命令,但只有一個可以處於前臺。其他命令可以處於後臺執行或掛起狀態。

建立 shell 指令碼“date_loop.sh”

#!/bin/bash
while :
do
    date > datefile
    sleep 10
done

(注意:可以使用 Emacs 建立 shell 指令碼:執行 emacs date_loop.sh,輸入上述指令碼,然後按 CONTROL-X CONTROL-S 儲存指令碼,然後按 CONTROL-X CONTROL-C 退出 Emacs。)

使 date_loop.sh 可執行

$ chmod +x date_loop.sh

在前臺執行命令

$ ./date_loop.sh

等待一段時間(大約 30 秒),然後使用 CONTROL-Z 向程序傳送 SIGTSTP 訊號

^Z[2] + Stopped (SIGTSTP)        date_loop

檢視 datefile 的最後一行

$ tail -1 datefile; sleep 10; tail -1 datefile
Thu Apr 27 10:46:06 BST 2006
Thu Apr 27 10:46:06 BST 2006

請注意,雖然程序是 可執行的,但它被掛起了,因此在每次 tail 命令之間的 10 秒間隔內,沒有新的“時間”被附加到檔案。

將程序置於後臺

 
$ bg
[2]     date_loop.sh&

程序恢復,datefile 再次更新

$ tail -1 datefile; sleep 10 ; tail -1 datefile
Thu Apr 27 10:48:34 BST 2006
Thu Apr 27 10:58:54 BST 2006

請注意,您可以在命令提示符下輸入命令。

將程序放回前臺

$ fg
date_loop.sh

透過鍵入“control-C”向程序傳送“SIGINT”。這將終止程序。我們確認 datefile 不再更新

^C
$ tail -1 datefile; sleep 20; tail -1 datefile
Thu Apr 27 10:59:55 BST 2006
Thu Apr 27 10:59:55 BST 2006


華夏公益教科書