Cob*_*ast 15 shell zsh background-process
我想将一个命令链作为背景,如cp a b && mv b c && rm a.
我试过这样做,cp a b && mv b c && rm a &但这只是最后一个过程的背景。
我如何后台命令链?
Gil*_*il' 22
cp a b && mv b c && rm a &是正确的。&的优先级低于&&. 事实上,&除了;和 newline:之外的任何东西都具有更低的优先级:&与 处于相同的句法类别;,区别在于;在前台&运行命令列表而在后台运行它。你可以自己测试一下:
$ dash -c 'sleep 2 && echo waited & echo backgrounded'
backgrounded
$ waited
Run Code Online (Sandbox Code Playgroud)
与 pdksh、ksh93、bash、csh、tcsh 相同。
zsh 是个例外,它奇怪地不兼容。这在手册中有记录:
如果子列表以
&,&|, 或 结束&!,shell 将在后台执行其中的最后一个管道,并且不等待它完成(注意与在后台执行整个子列表的其他 shell 的区别)。
不幸的是,即使在 sh 或 ksh 兼容模式下,zsh 也会以这种方式运行。为确保整个命令在后台执行,请在其周围加上大括号或圆括号。括号创建一个子shell,而大括号不会,但这无关紧要(除了作为某些shell 中的微优化),因为后台命令无论如何都在子shell 中。
{ cp a b && mv b c && rm a; } &
Run Code Online (Sandbox Code Playgroud)
rep*_*lay 14
你可以把它放在括号里,比如(cp a b && mv b c && rm a )&包含整个链。
| 归档时间: |
|
| 查看次数: |
4263 次 |
| 最近记录: |