터미널에서 일부 환경 변수를 설정한 다음 스크립트를 실행합니다. 스크립트에서 변수를 추출하는 방법은 무엇입니까? 그들의 가치관을 이해해야 합니다. 단순히 호출하는 것은 $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