スクリプトからタスクを前面にインポートする方法は?

スクリプトからタスクを前面にインポートする方法は?

テストを開始してからしばらく待ってから、シェルスクリプトを使用してプログラムを起動したいと思います。

#!/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誤解が深まるようです。)

答え1

シェルでジョブ制御を有効にするだけです。set -m

#!/bin/bash
set -m
sleep 3 &  # test
sleep 1    # wait some
sleep 4 &  # run program under test
jobs
fg %1

bashのマニュアルを引用すると、次のようになります。

-中

モニターモード。ジョブ制御が有効になりました。このオプションは、それをサポートするシステムの対話型シェルに対してデフォルトで有効になっています(上記のタスク制御を参照)。バックグラウンドプロセスは別のプロセスグループで実行され、完了すると終了ステータスを含む行を印刷します。

答え2

#!/bin/bash

sleep 3 & sleep_pid=$!
sleep 1
sleep 4 &
wait "$sleep_pid"

これを前面に置くのは、sleep 3完了するのを待つのと同じです。私はこれがあなたがしたいことであると仮定します(または少なくともこれは影響あなたが探しているもの)、それがまさに上記のスクリプトがすることです。ジョブのPIDを変数に保存し、そのsleep_pid値を呼び出しに使用してこれを行いますwait

関連情報