작업을 포그라운드로 가져오고 터미널에서 사용자 입력을 허용하는 방법

작업을 포그라운드로 가져오고 터미널에서 사용자 입력을 허용하는 방법

비슷하다이 질문하지만 중요한 면에서 다릅니다. 스크립트에서 여러 작업을 시작하고 백그라운드에서 실행해야 합니다. 그런 다음 이를 관리하거나 진행 상황을 확인하려면 이를 포그라운드로 가져와 사용자 입력을 허용해야 합니다.

내가 현재 하고 있는 일은:

  1. 루프에서 여러 작업을 시작합니다. 예:

    for ip in $(cat ip-list.txt); do run-job.sh $ip &; done
    
  2. 예를 들어 개별 작업을 전면에 가져옵니다.

    fg 1 
    

이렇게 하면 작업이 전면으로 표시되지만 두 가지 문제가 있습니다. 사용자 입력을 제공할 수 없습니다. 마치 내 입력을 받는 프로세스가 작업 자체가 아니라 작업을 시작한 스크립트인 것처럼 프로세스가 응답하지 않습니다. 또한 $ip 변수는 평가되지 않은 상태로 표시됩니다. 즉, "192.168.1.34"가 아닌 "$ip"로 정확하게 표시됩니다. 그러나 'jobs'를 입력하면 10개의 작업이 모두 별도로 나열되는 것을 볼 수 있습니다. (그러나 모두 "run-job.sh $ip"로 동일하게 보입니다. 어떤 작업이 어떤 IP 값을 사용하고 있는지 확인하려면 ps를 사용해야 합니다.)

내가 원하는 동작은 개별적으로 입력하여 모든 작업을 시작한 다음 Ctrl-Z를 눌러 백그라운드에 두는 경우 얻을 수 있는 동작과 동일합니다. 그렇게 하면 fg를 사용하여 포그라운드로 가져오면 사용자가 프로세스에 직접 입력할 수 있으며 $ip 변수는 "192.168.1.34"로 평가된 것으로 표시됩니다. 그러나 수십 또는 수십 개의 작업에 대해서는 수동으로 작업을 입력하는 것이 불가능합니다.

관련 정보