동일한 쉘을 계속 사용할 수 있도록 스크립트를 백그라운드에서 실행하려면 어떻게 해야 합니까?

동일한 쉘을 계속 사용할 수 있도록 스크립트를 백그라운드에서 실행하려면 어떻게 해야 합니까?

모든 계산을 자동화하는 스크립트가 작동하지만 시간이 좀 걸립니다. 스크립트 시작에는 사용자 입력이 필요하며 완료될 때까지 실행됩니다.

사용자 입력 후 스크립트 실행을 유지하고 동일한 셸에서 다른 작업을 계속하는 방법

답변1

백그라운드에서 스크립트를 실행하려면 셸 스크립트의 명령 뒤에 앰퍼샌드(&)를 추가합니다. 즉, 다음과 같습니다.

#!/bin/bash
echo "type something"
read text
command $text &

위의 내용은 내가 의미하는 바의 기본적인 예입니다.

이미 스크립트를 시작한 경우 Ctrl+는 Z스크립트를 일시 중지한 다음 bg백그라운드에서 다시 시작합니다.

데이터를 눈에 띄게 출력하는 명령을 실행하면 백그라운드에서 실행 중이더라도 콘솔에 출력됩니다. 이를 방지하려면 표준 출력을 파이프해야 합니다. 입력하면 fg백그라운드 프로세스가 포그라운드로 이동합니다.

답변2

가장 쉬운 방법은 데이터 입력을 마친 후 Ctrl+ (스크립트 일시 중지)를 누른 다음 스크립트를 백그라운드로 보내고 계속 실행하는 것입니다. 그러면 현재 쉘 세션을 정상적으로 사용할 수 있습니다.Zbg

그러나 더 나은 접근 방식은 사용자 입력이 필요하지 않도록 스크립트를 수정하는 것입니다. 스크립트를 시작할 때 필요한 입력을 매개변수로 전달하기만 하면 됩니다. 이렇게 하면 귀하와 귀하의 사용자 모두의 삶이 더 쉬워질 것입니다.

예를 들면 다음과 같습니다.

#!/bin/bash
echo "Give me the first number! "
read num1

echo "Give me the second number! "
read num2

이것을 사용하십시오 :

#!/bin/bash
num1=$1
num2=$2

다음과 같이 스크립트를 실행합니다(여기서 10및 은 및 각각 30으로 저장된 예제 숫자입니다 ).num1num2

script.sh 10 30 > out 2>err&

이렇게 하면 스크립트가 즉시 백그라운드로 전송되고, 모든 출력이 이름이 지정된 파일로 리디렉션되고 out, 모든 오류 메시지가 이름이 지정된 파일로 리디렉션됩니다 err. 모든 매개변수는 시작 시 이미 설정되어 있으므로 추가 상호 작용이 필요하지 않습니다.

일반적으로 가능하면 사용자 입력이 필요한 스크립트를 작성하지 마십시오. 스크립트를 제공하기 위해 콘텐츠를 입력하는 일은 힘들고 오류가 발생하기 쉬우며 자동화하기 어렵고 나중에 동일한 작업을 반복하기가 더 어렵습니다.

답변3

다른 쉘 창을 여는 것을 고려해 보셨나요? VT-100 터미널이나 이와 유사한 터미널을 강제로 사용해야 한다면 매우 놀랄 것입니다. 이 터미널은 오래 전에 인기를 끌지 못했습니다.

답변4

tmux또는 같은 screen터미널 멀티플렉서를 사용하는 것이 좋습니다 . 이를 사용하면 백그라운드 콘솔에서 프로그램을 실행하고 때때로 출력을 확인하거나 프로그램의 콘솔에서 활동이 발생할 때 알림을 받을 수 있습니다. 또는 별도의 창에서 실행하고 다른 창에서 다른 작업을 수행하는 동안 프로그램 출력을 볼 수도 있습니다.

관련 정보