쉘 스크립트에서 환경 변수를 “내 보낸”방법은 무엇입니까? 알고 있지만 export스크립트가

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)


답변