Bash 스크립트에서 환경 변수 가져오기

Bash 스크립트에서 환경 변수 가져오기

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

관련 정보