다른 쉘 스크립트를 호출하고 완료될 때까지 어떻게 기다릴 수 있습니까?
입력 매개변수를 전달하고 결과 코드를 다시 받고 싶습니다. 나머지 코드를 계속 실행합니다.
답변1
어떤 쉘을 사용하고 있는지 말하지 않았으므로 bash를 가정하면 그냥 할 수 있습니다
#!/bin/bash
/path/to/other/script arg1 arg2
rc=$?
이제 rc 변수에는 다른 스크립트의 반환 코드가 포함됩니다. 달성하려는 목표에 따라 더 많은 작업을 시도할 수도 있지만 질문이 매우 모호하므로 여기서 시작하는 것이 가장 좋습니다.
답변2
수행하려는 작업에 따라 두 가지 주요 가능성이 있습니다.
다른 프로그램과 마찬가지로 다른 스크립트를 호출할 수 있습니다.
/path/to/other/script foo bar echo "The script exited with status $?"
다른 스크립트를 "가져올" 수 있습니다. 즉, 실행 중인 셸이 이를 읽고 해당 내용을 실행하도록 할 수 있습니다. 이러한 방식으로 호출된 스크립트(변수 할당, 현재 디렉터리 변경 등)는 호출자의 환경을 수정합니다. 다른 스크립트의 내장 함수
.
(단지 점)를 호출합니다. 일부 쉘에는source
다른 이름이 있습니다.
. 이 방법으로 인수를 전달할 수는 없지만(일부 쉘에서는 가능하지만 전부는 아님) 호출된 스크립트는 호출자의 모든 변수에 액세스할 수 있습니다.. /path/to/other/script
어느 쪽이든 다른 스크립트의 경로를 생략하면 자동으로 현재 디렉토리를 찾습니다 $PATH
. 일부 쉘도 현재 디렉토리를 자동으로 찾지만 다른 스크립트는 그렇지 않습니다(표준 동작 아님).
답변3
이를 수행하는 또 다른 방법이 있습니다.
실제 Korn Shell을 사용하는 경우(pdksh는 확실하지 않음) 함수를 동적으로 로드할 수 있습니다.
PATH 어딘가에 "main"이라는 파일을 만듭니다.
#!/bin/ksh
echo "Main ksh script"
echo "Calling georgi, probably in another file"
georgi $1 $2 $3
echo "Back from georgi"
franco $1 $2 $3
예를 들어, 다른 곳에 "georgi"라는 파일을 만듭니다 /tmp
.
function georgi {
echo "Enter function georgi $1 $2 $3"
}
function franco {
echo "Enter function franco $1 $2 $3"
}
파일을 기본 실행 가능하게 만듭니다. "georgi" 파일 만들기아니요실행 가능. FPATH라는 변수를 내보냅니다.
export FPATH=/tmp
"main" 파일을 실행합니다:
% ./main aaa bbb c123
Main ksh script
Calling georgi, probably in another file
Enter function georgi aaa bbb c123
Back from georgi
Enter function franco aaa bbb c123
이는 다소 모호하며 호출한 첫 번째 함수 다음에 자동 로드된 파일의 이름을 지정하고 PATH 및 FPATH에 있는 경우 자동 로드된 파일을 실행 파일로 표시하지 않는 등 정확하게 올바른 작업을 수행해야 합니다.