1、NEWLINE和“;”:分离命令
换行符NEWLINE是一个独特的命令,因为所有的命令处理都是从它开始的。任何一个命令行末尾都要按回车键。
分号“;”也是一个命令分离器。不过它不能开始执行命令,也不会改变任何函数的状态。在命令行上用分号分开每一个命令,就可以按顺序去执行这些命令了。在这命令行的末尾按下回车键,命令就会被执行:
引用:$ x ; y; z
如果x、y和z是命令,上面的命令行就等同于下面的3个命令;不同之处在于,shell会在每下面每个命令后(x、y和z)都给出一个提示,而上面的命令行只有在z完成后才给出一个提示:
引用:$ x
$ y
$ z
2、“\”:继续执行命令
当用户输入一个很长的命令,并且光标到了屏幕或窗口最右端时,可以用反斜杠符号(\)在下一行继续用户的命令。
引用:$ c\
m\
d
相当于输入一个完整的命令cmd。
3、“|”和“&”:分离命令并执行其他任务。
命令分离符有管道符号(|)和后台任务符号(&)。这两个命令分离符不会开始执行一个命令,但是它们能改变函数的一些方面。管道符号可以改变标准输入的代码,也可以改变标准输出的目的地址。后台任务符通知shell在后台执行任务,所以用户立刻就能回到shell提示符,继续执行其他任务。
例如,一个包含3个任务的作业:
引用:$ x | y | z
shell把任务x的输出定向到任务y,并把y的输出定向给z。因为shell在前台运行整个作业,所以z完成前,不会有提示符返回。任务x不完成,任务y不会完成;任务y不完成,任务z也不会完成。
下一个命令是在后台执行任务a和b,在前台执行任务c:
引用:a & b & c
[1] 14271
[2] 14272
shell显示出每个后台运行进程的作业号(即上面的“[1]”和“[2]”)和PID(即上面的“14271”和“14272”)。任务c一完成用户就会回到提示符。
在给出新任务的提示符($)前,shell会检查后台作业是否都已完成。对每个已经完成的作业,shell将显示出它的作业号、单词Done和所调用该作业的命令行,然后shell会显示出提示符。列举作业号的时候,最前的作业后会跟一个减号(-),最后的作业号后面会跟一个加号(+)。其他作业跟一个空格。最后一个命令运行后,shell在显示提示符前会显示下列内容:
引用:[1]- Done a
[2]+ Done b
下面的命令在后台执行全部三个任务,用户可以立刻回到shell提示符:
引用:$ a & b & c &
[1] 14290
[2] 14291
[3] 14293
用户可以用管道符(|)来传送一个任务的输出到下一个任务,后台任务符(&)号会把这个过程作为后台作业运行。当然,提示符也能立刻返回。shell把管道连接的命令看成一个单一的作业,不管管道连接了多少任务,也不管任务有多复杂。tcsh会显示3个进程(但是都属于一个作业)。bash和zsh只显示一个进程。
4、“()”:组合命令
可以用括号组合命令。对每一个组,shell创建一个称为子shell(subshell)的自身副本来处理每个命令组,并创建一个新进程处理每个命令。每个子shell(作业)都有自己的环境,也就是说有自己的一套已赋值的变量,这些变量可能和其他的子shell的环境不同。
下面的命令行在后台依次执行a和b,同时在后台执行c,shell提示符会立刻返回:
引用:$ (a;b) & c &
15007
这个例子和前面提到的a & b & c & 有所不同,因为a和b是依次而非并发执行的。
与之类似,下面的命令行在后台依次执行a和b,同时,在后台也依次执行c和d。前一个子shell运行a和b,后一个子shell运行c和d,二者是并发进行的,并且shell提示符会立刻返回:
引用:$ (a;b) & (c;d) &
15020
15021
$

