跳转到内容

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


华夏公益教科书