Bash 스크립트를 사용하여 서브 쉘을 올바르게 실행하는 방법 배우기

백그라운드에서 병렬로 실행되도록 서브 쉘을 지시하는 방법

쉘은 Linux 시스템에서 명령을 입력하기위한 기본 인터페이스입니다. 이 명령을 사용하여 명령을 직접 입력하거나 명령 시퀀스가 ​​포함 된 파일 (스크립트)을 지정할 수 있습니다. 쉘은 계층 구조로 구성되며 모든 쉘은 새 쉘을 작성할 수 있습니다. 새로운 쉘은 그것을 만드는 부모 쉘의 하위 쉘인 하위 프로세스로 간주됩니다.

기본적으로 서브 쉘은 상위 프로세스가 종료되면 서브 쉘도 종료한다는 의미에서 해당 상위에 종속됩니다. 모든 출력은 서브 쉘에서 상위 쉘로 전달됩니다.

하위 쉘을 만드는 방법

Bash 쉘 스크립트에서 괄호 표기법을 사용하여 서브 쉘을 작성합니다.

#! / bin / bash echo "서브 쉘 시작하기 전에"(count = 1 while [$ count -le 99] do echo "$ count"sleep 1 ((count ++)) done) echo "Finished"

이 예제에서 while 루프 는 괄호로 묶여 있으므로 스크립트 파일이 실행되는 셸의 하위 셸에서 실행됩니다.

백그라운드에서 서브 쉘 실행하기

서브 쉘이 백그라운드에서 실행되도록 지정하지 않는 한, 상위 쉘은 나머지 쉘을 계속하기 전에 서브 쉘이 완료되기를 기다립니다. 그러나 병렬로 하위 쉘을 실행하려면 백그라운드에서 실행하고 하위 쉘 표현식에 따라 앰퍼샌드 문자를 사용하여 수행하십시오.

( "count ++") done) & echo "Finished"#! / bin / bash echo "서브 쉘을 시작하기 전에"

여러 개의 서브 셸 병렬 실행

백그라운드 프로세스 로 여러 서브 쉘을 작성하는 경우, 태스크를 병렬로 실행할 수 있습니다. 일반적으로 운영 체제는 프로세스와 동일한 수의 프로세서 또는 코어가 있다고 가정 할 때 각 프로세스 및 하위 프로세스마다 서로 다른 프로세서 또는 코어를 사용합니다. 그렇지 않으면 작업이 동일한 프로세서 또는 코어에 할당됩니다. 이 경우 프로세서 또는 코어는 작업이 완료 될 때까지 할당 된 작업을 계속 전환합니다. 다음 예제에는 두 개의 하위 프로세스가 있습니다. 첫 번째 값은 1에서 99 사이이고 두 번째 값은 1000에서 1099 사이입니다.

($ count -le 99) while echo "$ count"sleep 1 ((count ++)) done) & (count = 1000 while while [$ count -le 99] 1099] echo "$ count"sleep 1 ((count ++)) done) & echo "Finished"

wait 문을 사용하여 나머지 스크립트를 계속 진행하기 전에 하위 프로세스가 완료 될 때까지 대기하도록 부모 프로세스에 지시합니다.

($ count -le 99) while echo "$ count"sleep 1 ((count ++)) done) & (count = 1000 while while [$ count -le 99] 1099] echo "$ count"sleep 1 ((count ++)) done) & wait echo "Finished"

서브 셸 사용

서브 쉘은 특정 환경이나 디렉토리에서 명령을 실행해야 할 때 유용합니다. 각 명령이 다른 하위 쉘에서 실행되면 변수 설정이 섞일 위험이 없습니다. 완료되면 상위 프로세스의 환경이 하위 프로세스의 영향을받지 않으므로 설정 및 현재 디렉토리를 복원 할 필요가 없습니다.

서브 쉘은 다른 매개 변수로 여러 번 실행될 수 있도록 함수 정의에 사용될 수 있습니다.