Unix 스크립트의 실행 모드에 대해 질문이 있습니다.
예를 들어 다음 줄을 포함하는 스크립트는 다음과 같습니다.
command B
function C()
{
Myscript // Myscript is a script
command D
}
command E
Myscript
실행이 더 오래 걸리는 경우 (예: 5분) 다음 명령( command D
)이 실행되거나 Myscript
완료될 때까지 기다립니다.
답변1
특정 스크립트의 경우 둘 다 실행 Myscript
되지 않습니다 command D
. 함수를 정의했지만 C
호출하지 않았습니다.
실행 순서는 다음과 같습니다.
command B
완료될 때까지 실행합니다.command E
완료될 때까지 실행합니다.
호출하면 완료될 때까지 C
실행된 Myscript
다음 command D
완료될 때까지 실행됩니다.
쉘 스크립트에서 호출하는 모든 것은 표시된 순서대로 실행되며 완료될 때까지 실행됩니다. 다른 작업과 병렬로 무언가를 실행해야 하는 경우 작업 제어를 사용해야 합니다( &
& 문자를 사용하여 작업을 백그라운드에 배치하는 방법 참조 ). 간단한 예:
A
B
완료될 때까지 실행한 A
다음 B
완료될 때까지 실행합니다. 스크립트가 완료되었습니다.
A &
B
백그라운드에서 실행한 A
다음 포그라운드에서 B를 실행합니다. 쉘 스크립트는 B
완료되면 종료됩니다. A
아직 실행 중일 수도 있습니다.
A &
B &
A
백그라운드에서 실행한 다음 ( A
완료를 기다리지 않고) B
백그라운드에서 실행합니다. 연극은 즉시 종료됩니다.
A &
B &
wait
A
백그라운드에서 실행한 다음 ( A
완료를 기다리지 않고) B
백그라운드에서 실행합니다. 그런 다음 스크립트는 기다렸다가 A
완료 B
되면 종료됩니다.
답변2
한 가지 예외가 있는데 이에 대해서는 나중에 자세히 설명하겠습니다. 그러나 이러한 명령은 동일한 셸에서 실행됩니다( Myscript
새 셸을 열 더라도 command D
해당 명령이 실행되는 정확히 동일한 "상위" 셸을 갖게 됩니다). *NIX 쉘은 병렬화를 지원하지 않으므로 Myscript
제어가 통과할 수 있도록 실행을 중지해야 합니다(종료 코드 사용) command D
.
신호를 Myscript
사용 하거나 후속 detach 를 작성하여 분리하는 경우는 예외입니다 . 이렇게 하면 스크립트가 백그라운드에 배치됩니다.NOHUP
&
Myscript
다음 코드 조각을 연구하세요.
openssl enc -e bf -in verybigfile -out outputfile -k thisismykey &; # this is a long operation because of the size of the very big file
echo 'hi!' # this will be written during the encrypting operation
이제 이것이 거의 자명해지기를 바랍니다.
Alexios의 답변에는 좋은 점이 포함되어 있습니다. 함수를 호출하지 않으므로 실행되지 않습니다.