Unix 指南/解释/管道和作业控制
外观
我们可以将命令的标准输入、输出和错误连接到其他命令或文件。
| 字符称为 管道,它允许将它之前的命令的输出重定向到它之后的命令(而不是作为标准输出显示)。
> 字符是“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