Как перевести задачу на передний план и разрешить пользователю вводить данные с терминала

Как перевести задачу на передний план и разрешить пользователю вводить данные с терминала

Похожий наэтот вопросно отличается важным образом: мне нужно запустить кучу заданий из скрипта и запустить их в фоновом режиме. Затем, чтобы управлять ими или проверять ход их выполнения, мне нужно вывести их на передний план и разрешить ввод данных пользователем.

В настоящее время я делаю следующее:

  1. Запустить несколько заданий в цикле, например

    for ip in $(cat ip-list.txt); do run-job.sh $ip &; done
    
  2. Выведите индивидуальную работу на передний план, например,

    fg 1 
    

Это выводит задание на передний план, однако есть две проблемы: я не могу предоставить пользовательский ввод — процесс не отвечает, как будто процесс, получающий мой ввод, является скриптом, который запустил задание, а не самим заданием; также переменная $ip отображается неоцененной, т. е. именно как "$ip", а не "192.168.1.34". Однако, когда я ввожу "jobs", я вижу все 10 заданий, перечисленных отдельно (но все они выглядят совершенно одинаково: "run-job.sh $ip". Мне приходится использовать ps, чтобы увидеть, какое задание использует какое значение ip.)

Поведение, которое я хотел бы, такое же, как если бы я запустил все эти задания, введя их по отдельности, а затем нажав control-z, чтобы перевести их в фоновый режим. Если я сделаю это таким образом, то, когда я выведу их на передний план с помощью fg, они позволят пользователю вводить данные непосредственно в процесс, а также переменная $ip будет показана оцененной как "192.168.1.34". Однако ручной ввод заданий невозможен для десятков или десятков заданий.

Связанный контент