Amazon EC2 계정이 여러 개 $EC2_HOME
있는데 스크립트를 사용하여 와 같은 변수를 빠르게 전환하려고합니다 .
다음과 같이 쉘 스크립트를 설정했습니다.
#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME
스크립트를 실행할 때 EC2_HOME
설정된 것으로 알고 있지만 export
스크립트가 완료된 후 를 사용 하면 변수 가 계속 사용 된다고 생각했습니다 . 달리기 echo $EC_HOME
는 아무것도 표시하지 않기 때문에 그렇지 않습니다.
나는 이것이 매우 기초적인 리눅스 스크립팅 지식이어야한다는 것을 알고 있지만 그것을 모른다. 운없이 관련 질문을 찾아 보았습니다. 이것이 중복되면 사과드립니다.
답변
스크립트를 소싱해야합니다.
. ./script
또는
source ./script
답변
스크립트를 실행하면 자체 쉘과 자체 환경이 생겨 스크립트가 완료 되 자마자 다시 사라집니다. 환경 변수를 유지하려면 스크립트를 현재 쉘로 소싱하십시오.
$ source ./a.sh
또는 동등하게 (그러나 조금 더 이식 가능하게) POSIX 도트 명령을 사용하십시오 .
$ . ./a.sh
그런 다음 정의는 현재 셸 환경에 배치되고 사용자가 시작한 모든 프로그램에서 상속됩니다.
스크립트 실행에 더 가까워 . a.sh
지려면 PATH
환경 변수 에서 디렉토리를 검색하여 a.sh를 찾으십시오 .
이 이러한 행동 방식에 약간의 미묘한, 그리고 여부 .
및 source
(전혀 또는 현재) 동일합니다. . ./a.sh
확실히 모든 POSIX 호환 쉘에서 동일하게 동작하지만 것입니다 source
및 .
, 및 . a.sh
과 . ./a.sh
다를 수 있습니다. 강타의 경우 source
와 .
동일합니다 모든 경우에; 대한 zsh을 source
항상 먼저 현재 디렉토리를 확인 ; ksh는 본질적으로 유사합니다.
스크립트 이름이 (로 포함 된 /
) 경로로 제공되면 해당 경로는 모든 경우에 직접 사용됩니다. 가장 휴대하기 쉬운 방법은 . ./script
또는 . /path/to/script
입니다.
답변
단지 기록을 위해.
env를 시스템으로 내보내는 인터넷에서 스크립트를 실행하려면
다음 형식을 사용할 수 있습니다
source <(curl -s -L https://raw.githubusercontent.com/iamwwc/wwcdocker/master/install.sh)
예를 들면 다음과 같습니다.
source <(curl -s -L https://example.com/install.sh)