我正在嘗試運行一些永遠無法完成的命令。這些命令監視目錄並在檔案變更時更新檔案。我的想法是,我需要由不同工具監視多個資料夾,能夠透過單一命令運行所有資料夾。
對於按預期返回的普通命令,請用作品分隔命令;
。
ls /;
cd /;
ls var;
cd var;
ls log;
cd log
當我嘗試將非返回命令連結在一起時(例如tail -f <some_file>
or )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/ &