ジョブをフォアグラウンドに持ってきて、ターミナルからのユーザー入力を許可する方法

ジョブをフォアグラウンドに持ってきて、ターミナルからのユーザー入力を許可する方法

に似ているこの質問しかし、重要な点が異なります。スクリプトから多数のジョブを開始し、バックグラウンドで実行する必要があります。その後、ジョブを管理したり進行状況を確認したりするために、ジョブをフォアグラウンドに移動してユーザー入力を許可する必要があります。

私が現在やっていることは以下の通りです。

  1. ループ内で複数のジョブを開始します。例:

    for ip in $(cat ip-list.txt); do run-job.sh $ip &; done
    
  2. 個々のジョブをフォアグラウンドにするには、例えば

    fg 1 
    

これによりジョブがフォアグラウンドになりますが、2 つの問題があります。ユーザー入力を提供できません。プロセスは応答しません。入力を受け取るプロセスは、ジョブ自体ではなく、ジョブを起動したスクリプトであるかのように表示されます。また、変数 $ip は評価されずに表示されます。つまり、「192.168.1.34」ではなく「$ip」と表示されます。ただし、「jobs」と入力すると、10 個のジョブがすべて個別にリストされます (ただし、すべて「run-job.sh $ip」とまったく同じに見えます。どのジョブがどの IP 値を使用しているかを確認するには、ps を使用する必要があります)。

私が望む動作は、これらのジョブをすべて個別に入力して開始し、その後、Ctrl + Z を押してバックグラウンドにした場合と同じ動作です。そのようにすると、fg でジョブをフォアグラウンドにしたときに、ユーザーがプロセスに直接入力できるようになり、変数 $ip が "192.168.1.34" と評価されて表示されます。ただし、数十または数十のジョブを手動で入力するのは現実的ではありません。

関連情報