我正在尝试运行一些永不结束的命令。这些命令监视目录并在文件更改时更新文件。我的想法是,我需要由不同工具监视的多个文件夹,能够通过单个命令运行所有文件夹。
对于按预期返回的正常命令,使用 分隔命令即可;
。
ls /;
cd /;
ls var;
cd var;
ls log;
cd log
当我尝试将不返回的命令(如tail -f <some_file>
或)链接在一起时coffee -c -w <some_coffeescript_folder>
,只有第一个命令会运行。
有没有办法用一个命令完成这个操作?下面是我尝试链接在一起的命令:
coffee -c -m -w public/javascript/*.coffee; \
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/; \
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/;
答案1
您可以通过在命令中添加“&”符号在后台运行它们:
coffee -c -m -w public/javascript/*.coffee &
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/ &
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/ &
如果您想查看当前在后台运行的所有作业,请执行以下操作:
jobs -l
要将后台作业重新放到前台,请使用 fg (PID 是可选的):
fg <PID>
要将前台作业(“阻止”你的 shell)发送回后台模式,请使用 Ctrl-Z / bg:
$ tail -f foobar.log # is "blocking" your shell
(hit Ctrl-Z)
$ bg
我猜这些作业已绑定到您的 shell,不会自动分叉。这意味着如果您通过 SSH 登录并断开连接,shell 会收到 SIGHUP,该信号也会发送到作业。这将停止/退出您的命令。
如果您希望在退出后仍能保持作业正常运行,您可能需要查看 bash 内置的“disown”:
jobs # fetch job ID in the squre brackets
disown -h %<JOBID> # disown job by using the job ID
另一个选项是“nohup”(命令,不是 bash 内置)或者使用终端多路复用器,如“screen”或“tmux”。
答案2
尝试这个:
coffee -c -m -w public/javascript/*.coffee &
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/ &
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/ &