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 명령은 비대화형 쉘을 시작하지 않고 현재 쉘에서 스크립트를 실행합니다.