Bash
如何在腳本中將作業置於前台?
我想啟動一個測試,然後稍等片刻,然後使用 shell 腳本啟動一個程序:
#!/bin/bash sleep 3 & # test sleep 1 # wait some sleep 4 & # run program under test fg 1 # <-- I want to put test back in "foreground", but yields "line 5: fg: no job control"
我想我誤解了“前景”的含義,但是還有其他方法可以做我想做的事嗎?(我嘗試使用
jobs -x
and前綴nohup
,但我懷疑我的誤解更深了。)
您只需要在 shell 中啟用作業控制
set -m
#!/bin/bash set -m sleep 3 & # test sleep 1 # wait some sleep 4 & # run program under test jobs fg %1
引用 bash 手冊:
-m
監控模式。作業控制已啟用。對於支持它的系統上的互動式 shell,預設情況下此選項處於啟用狀態(請參閱上面的 JOB CONTROL)。後台程序在單獨的程序組中執行,並在完成時列印包含其退出狀態的行。
#!/bin/bash sleep 3 & sleep_pid=$! sleep 1 sleep 4 & wait "$sleep_pid"
把它
sleep 3
放在前台就相當於等待它完成。我假設這是您想要做的(或者至少這是您正在尋找的效果),這就是上面的腳本所做的。它通過將作業的 PID 保存在變數sleep_pid
中,然後在呼叫wait
.您還可以使用作業 ID:
#!/bin/bash sleep 3 & sleep 1 sleep 4 & wait %1