여기서하고 있는 것은 동일한 프로세스에서 실행되는 하위 스크립트를 포함 second.sh
하며 third.sh
쉘 프로그래밍에서 "소싱"이라고합니다. . ./second.sh
기본적으로 해당 second.sh
시점 의 텍스트를 포함하는 것과 같습니다 . exit
명령은이 문제는 원래 스크립트 또는 소스 인 스크립트를 호출 여부를하지 않는 프로세스를 종료합니다.
당신이 원하는 모든이의 명령을 실행하는 경우 second.sh
그리고 third.sh
그들은 자식 프로세스로이 스크립트를 호출 액세스해야 또는 원래 스크립트에서 변수와 함수를 수정하지 않습니다.
#! /bin/ksh
echo "prova"
./second.sh
echo "ho lanciato il secondo"
./third.sh
echo "ho lanciato il terzo"
원래 스크립트에서 변수 및 함수에 액세스하기 위해 다른 스크립트가 필요하지만 수정하지 않은 경우 서브 스크립트에서이 스크립트를 호출하십시오. 서브 쉘은 별도의 프로세스이므로 exit
종료합니다.
#! /bin/ksh
echo "prova"
(. ./second.sh)
echo "ho lanciato il secondo"
(. ./third.sh)
echo "ho lanciato il terzo"
당신이에 정의 된 변수 나 함수를 사용해야하는 경우 second.sh
와 third.sh
부모 스크립트를, 당신은 그들을 소싱 유지해야합니다.
return
내장 종료에만 공급 스크립트가 아니라 전체 프로세스 -와 다른 스크립트를 포함한 사이의 몇 가지 차이점 중 하나의 .
명령을 부모 스크립트의 텍스트를 포함. 전래 스크립트 만 호출하면 exit
최상위에 내부 기능 대조적으로, 당신은 변경할 수 있습니다 exit
로 return
. 별명을 사용하여 스크립트를 수정하지 않고이를 수행 할 수 있습니다.
#! /bin/ksh
echo "prova"
alias exit=return
. ./second.sh
echo "ho lanciato il secondo"
. ./third.sh
unalias exit
echo "ho lanciato il terzo"
exit
내부 함수라고도 하면 , 귀찮은 방법이 없다고 생각합니다. 번거로운 방법은 출구 트랩을 설정하고 코드를 넣는 것입니다.
#!/bin/ksh
do_first () {
echo "prova"
trap "after_second" EXIT
. ./second.sh
after_second
}
after_second () {
echo "ho lanciato il secondo"
trap "after_third" EXIT
. ./third.sh
after_third
}
after_third () {
trap - EXIT
echo "ho lanciato il terzo"
}
do_first
.
현재 셸에서 다른 파일 을 제공하는 명령을 사용하고 있습니다. 자식 셸 또는 하위 셸이 없습니다. 당신이하려고 하셨나요 실행second.sh
하고third.sh
그들을 소싱 대신?