두 개의 스크립트가 있고 ( ) 명령을 사용하여 실행 합니다 first.sh
.second.sh
first.sh
second.sh
.
source
이 스크립트가 막혔어요
First.sh
value="myvalue"
export value
oldvalue="othervalue"
export value
값을 초기화하고 내보낸 후 이전 값을 초기화 하고 다시 내보냈 value
지만 oldvalue
.othervalue
second.sh
oldvalue
first.sh
답변1
다음을 사용하여 두 번째 "스크립트"를 .
얻으면달리기별도의 스크립트입니다.
예를 들어 다음 두 스크립트를 고려해보세요. 그 중 하나는달리다또 다른:
$ ls
script1* script2*
$ cat script1
#!/bin/bash
export value="myvalue"
oldvalue="othervalue"
# Here script1 is running the second script (not sourcing it)
./script2
$ cat script2
#!/bin/bash
echo "value: ${value}"
echo "oldvalue: ${oldvalue}"
세트 script1
및 내보내기 및 세트는 내보내기가 아닌 value
별도의 프로세스로 oldvalue
실행됩니다 . 이 두 값을 차례로 인쇄해 보세요. 출력은 다음과 같습니다.script2
script2
$ ./script1
value: myvalue
oldvalue:
보시다시피, 이 경우 두 변수 가시성에 대한 기대는 정확합니다. oldvalue
에서 파생되지 않았 으므로 script1
해당 값은 에서 정의되지 않습니다 script2
.
답변2
대답은 실제로 두 개의 스크립트가 있는 것이 아니라 include
다른 프로그래밍 언어처럼 두 개의 파일에 하나의 스크립트가 분산되어 있다는 것입니다.
따라서 변수는 두 스크립트 부분 사이의 환경을 통해 전달되지 않으며 동일한 셸 프로세스의 일부이기 때문에 사용할 수 있습니다.
이것은 당신이 실행하기 때문에 작동합니다
. first.sh
변수에 접근하기 전에 그래서 이것은 작동합니다second.sh
. first.sh
echo "$oldvalue"
하지만 이건 안 되지
echo "$oldvalue"
. first.sh