쉘 스크립트에서 "내보낸" 환경 변수를 어떻게 보존합니까?

쉘 스크립트에서 "내보낸" 환경 변수를 어떻게 보존합니까?

Amazon EC2 계정이 여러 개 있고 $EC2_HOME예를 들어 스크립트를 사용하여 변수를 빠르게 전환할 수 있기를 원합니다.

다음과 같이 쉘 스크립트를 설정했습니다.

#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME

스크립트를 실행할 때 EC2_HOME설정되어 있다는 것을 알고 있지만 사용하면 export스크립트가 완료된 후에도 변수가 유지될 것이라고 생각했습니다. 실행하면 echo $EC_HOME아무 것도 표시되지 않기 때문에 그렇지 않습니다 .

나는 이것이 매우 기본적인 Linux 스크립팅 지식임에 틀림없다는 것을 알고 있지만, 모르겠습니다. 관련 질문을 찾아보았지만 운이 없었습니다. 따라서 이것이 중복된 경우 사과드립니다.

답변1

스크립트를 사용해야합니다

. ./script

또는

source ./script

답변2

스크립트를 실행하면 자체 셸과 환경이 생기고, 스크립트가 완료되면 다시 사라집니다. 환경 변수를 유지하려면 스크립트를 현재 셸에 배치하세요.

$ source ./a.sh

또는 동등하게 (그러나 더 이식성이 높음) 사용POSIX 도트 명령:

$ . ./a.sh

그런 다음 이러한 정의는 현재 쉘 환경에 배치되고 여기에서 실행하는 모든 프로그램에 의해 상속됩니다.

스크립트 실행에 더 가까워지기 위해 환경 변수 . a.sh에서 디렉터리를 검색하여 a.sh를 찾습니다 .PATH


.그것들의 행동 방식과 과 가 source동일한지(또는 전혀 존재하는지)에는 약간의 미묘함이 있습니다. . ./a.sh동작은 모든 POSIX 호환 셸에서 확실히 동일하지만 source., . a.sh. ./a.sh,는 ​​다를 수 있습니다. 큰 타격을 위해source그리고 .똑같아모든 경우에;zsh는 source항상 현재 디렉토리를 먼저 확인합니다.; ksh는 본질적으로 유사합니다.

스크립트 이름을 경로( 포함 /)로 지정하면 모든 경우에 해당 경로가 직접 사용됩니다. 가장 휴대 가능하고 안정적인 것은 . ./script또는 입니다 . /path/to/script.

답변3

기록만을 위해서.

인터넷에서 스크립트를 실행하려면 환경을 시스템으로 내보내세요.

다음 형식을 사용할 수 있습니다.

source <(curl -s -L https://raw.githubusercontent.com/iamwwc/wwcdocker/master/install.sh)

예를 들어:

source <(curl -s -L https://example.com/install.sh)

답변4

노력하다

exec ./script

exec 명령은 비대화형 쉘을 시작하지 않고 현재 쉘에서 스크립트를 실행합니다.

관련 정보