여러 Amazon EC2 계정이 있고 다음을 사용하여 $EC2_HOME와 같은 변수를 빠르게 전환 할 수 있기를 원합니다. 스크립트입니다.

다음과 같이 설정된 셸 스크립트가 있습니다.

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

스크립트를 실행하면 EC2_HOME가 설정되었지만 export를 사용하면 스크립트가 완료된 후 변수가 고정 될 것이라고 생각했습니다. echo $EC_HOME를 실행해도 아무 것도 표시되지 않으므로 그렇지 않습니다.

이것은 매우 기초적인 Linux 스크립팅 지식이어야한다는 것을 알고 있지만 모르겠습니다. 운없이 관련 질문을 찾아 보았습니다. 중복되는 경우 사과드립니다.

답변

스크립트를 제공해야합니다.

. ./script 

또는

source ./script 

댓글

  • 이유는 스크립트가 현재 셸의 자식으로 새 셸 프로세스를 생성하기 때문입니다. 자식 프로세스에서 변경 한 환경은 부모에 영향을 줄 수 없습니다 . div id = “323cc66047″>

또는 source, 새 하위 프로세스를 생성하지 않고 현재 셸에서 명령을 실행하고 있습니다.

  • @glennjackman 비슷한 문제가 있으며 솔루션을 시도했지만 . 또는 source를 수행 할 때 쉘에서 로그 오프됩니다. 왜 이건 pening?
  • @Patryk : 스크립트에 exit 문이있을 수 있으므로 소싱하기에 적합하지 않습니다.
  • source ./script는 완전히 잘 작동합니다. sudo source ./script.shsudo: source: command not found를 말합니다. sudo를 사용하여 어떻게 할 수 있습니까?
  • @ 71GA : sudo의 컴파일 기본 설정 및 /etc/sudoers sudo로 명령을 실행할 때 환경을 보존 할 수 있거나 보존 할 수 없습니다. 스크립트를 소싱 한 다음 -E 옵션을 사용하여 sudo를 실행하여 환경을 보존하는 것이 좋습니다. 작동하지 않으면 할 수있는 일이 거의 없다고 생각합니다.
  • 답변

    실행할 때 스크립트는 자체 쉘과 자체 환경을 가져오고 스크립트가 완료되면 다시 사라집니다. 환경 변수를 유지하려면 스크립트를 현재 셸로 소싱하세요.

    $ source ./a.sh 

    또는 동등하게 (하지만 좀 더 이식 가능하게) POSIX dot 명령 :

    $ . ./a.sh 

    그런 다음 정의가 현재 셸의 환경에 배치되고 상속됩니다. 스크립트 실행에 더 가까워 지도록 . a.shPATH 환경 변수입니다.


    이러한 작동 방식과 .source는 동일하거나 전혀 존재합니다. . ./a.sh는 모든 POSIX 호환 셸에서 확실히 동일하게 작동하지만 source., . a.sh. ./a.sh는 다를 수 있습니다. . Bash의 경우 source.는 모든 경우에 동일합니다 . for zsh source는 항상 현재 디렉토리를 먼저 확인합니다 ; ksh는 본질적으로 유사합니다.

    스크립트 이름이 경로 (/ 포함)로 제공되면 해당 경로가 직접 사용됩니다. 모든 경우에. 가장 신뢰할 수있는 작업은 . ./script 또는 . /path/to/script입니다.

    답변

    기록 용입니다.

    환경을 시스템으로 내보내는 인터넷에서 스크립트를 실행하려는 경우

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

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

    예 :

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

    댓글

    • 위험 해 보이지만 스크립트를 신뢰한다면 유용합니다!

    답변

    exec ./script 

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

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다