Bash

如何在腳本中將作業置於前台?

  • March 2, 2021

我想啟動一個測試,然後稍等片刻,然後使用 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 -xand前綴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

引用自:https://unix.stackexchange.com/questions/637002