
터미널에서 일부 환경 변수를 설정한 다음 스크립트를 실행합니다. 스크립트에서 변수를 어떻게 가져올 수 있나요? 나는 그들의 가치를 알아야합니다. 단순히 작동하지 않는다고 언급하는 것뿐입니다 $MY_VAR1
. 비어 있습니다.
답변1
export
변수가 스크립트를 호출하는 환경의 실제 환경 변수인 경우(즉, 를 사용하여 내보낸 경우 )~일 것이다스크립트에서 사용할 수 있습니다. 그렇지 않다는 것은 내보내지 않았거나 쉘 변수로도 존재하지 않는 환경에서 스크립트를 실행한다는 것을 의미합니다.
예:
$ cat script.sh
#!/bin/sh
echo "$hello"
$ sh script.sh
hello
( 어디에도 존재하지 않으므로 빈 출력 라인 하나 )
$ hello="hi there"
$ sh script.sh
hello
( 환경 변수가 아닌 쉘 변수이므로 여전히 빈 줄만 출력됩니다 .)
$ export hello
$ sh script.sh
hi there
또는 호출 환경이 아닌 이 스크립트에 대해서만 환경 변수를 설정하려면 다음을 수행하세요.
$ hello="sorry, I'm busy" sh script.sh
sorry, I'm busy
$ env hello="this works too" sh script.sh
this works too
답변2
스크립트를 호출하기 전에 스크립트에서 액세스하려는 환경 변수를 내보내야 합니다. 즉:
Unix> export MY_TEMP=/tmp
Unix> some_script.sh
이제 some_script.sh는 $MY_TEMP에 액세스할 수 있습니다. 쉘 스크립트를 호출하면 스크립트 명령 앞에 마침표(".")와 공백, 스크립트 이름:
Unix> . some_script.sh # runs in current environment
디버깅 팁: 스크립트 상단에 set
명령을 포함하여 스크립트에서 볼 수 있는 변수를 확인하세요.
답변3
또한 "스크립트 실행 기간" 동안만 활성 상태로 유지하려면 해당 내보내기를 파일에 넣은 다음 스크립트 내에서 해당 파일을 소싱할 수 있습니다.
스크립트를 실행하면 새 셸에서 실행되므로 이러한 변수는 해당 하위 셸(및 그 하위 셸)에서만 내보내지고 자체 셸에서는 끝나지 않습니다. 즉, 다음과 같이 보입니다. 스크립트 실행이 끝나면 자동으로 설정을 해제합니다.
예:
# config.txt
export SECRET=foobar
# prog.sh
#!/usr/bin/env sh
source ./config.txt
echo $SECRET
이제 실행해 보세요:
chmod +x prog.sh
./prog.sh
그런 다음 SECRET 변수가 자신의 쉘로 유출되지 않았는지 확인하십시오.
echo $SECRET # <-- must echo a blank line