쉘 스크립팅을 처음 접했고 도전을 겪었습니다. 다음을 수행하여 ".profile"파일을 다시로드 할 수 있음을 알고 있습니다.
. .profile
하지만 내가 쓰고있는 bash 스크립트에서 동일하게 실행하려고하는데 작동하지 않습니다. 어떤 아이디어? 명확히하기 위해 제공 할 수있는 것이 있습니까?
감사
쉘 스크립팅을 처음 접했고 도전을 겪었습니다. 다음을 수행하여 ".profile"파일을 다시로드 할 수 있음을 알고 있습니다.
. .profile
하지만 내가 쓰고있는 bash 스크립트에서 동일하게 실행하려고하는데 작동하지 않습니다. 어떤 아이디어? 명확히하기 위해 제공 할 수있는 것이 있습니까?
감사
답변:
현재 쉘을 다시로드하려면 다음을 시도하십시오.
source ~/.profile
source
명령을 사용하면 파일이 스크립트로 실행 되기 때문에 ... 최악의 경우 누군가가 MyVar="$foo$MyVar"
bash_profile 과 같은 변수 할당을 사용 source ~/.profile
하면 최종 결과 MyVar="$foo$MyVar$MyVar"
를 제공하므로 $MyVar
나중에 잘못된 값을 갖습니다. (에 관계없이 잘못된 관행을 바로 대체 솔루션에 대한 문의)
~ / .profile 파일을 다시로드 / 소스 할 때 몇 가지 문제가 발생합니다. [이것은 우분투 리눅스를 의미합니다-어떤 경우에는 명령의 세부 사항이 다를 수 있습니다]
기원 후. 1)
이것을 터미널에서 직접 실행하면 서브 쉘이 생성되지 않습니다. 따라서 두 가지 명령 중 하나를 사용할 수 있습니다.
source ~/.bash_profile
또는
. ~/.bash_profile
두 경우 모두 .profile 파일의 내용으로 환경을 업데이트합니다.
광고 2) 다음 중 하나를 호출하여 bash 스크립트를 시작할 수 있습니다
sh myscript.sh
또는
. myscript.sh
첫 번째 경우 시스템의 환경 변수에 영향을 미치지 않는 서브 쉘을 작성하고 서브 쉘 프로세스에서만 볼 수 있습니다. 서브 쉘 명령을 완료 한 후에는 내보내기 등이 적용되지 않습니다. 이것은 일반적인 실수이며 많은 개발자가 많은 시간을 잃게 만듭니다.
스크립트에 적용된 변경 사항이 글로벌 환경에 영향을 미치려면 스크립트를 실행해야합니다.
.myscript.sh
명령.
스크립트가 서브 쉘에서 실행되지 않도록하기 위해이 기능을 사용할 수 있습니다. (또 다른 예는 우분투 쉘입니다)
#/bin/bash
preventSubshell(){
if [[ $_ != $0 ]]
then
echo "Script is being sourced"
else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;
fi
}
이것이 일반적인 오해를 해결하기를 바랍니다! : D 행운!
bash 스크립트는 별도의 서브 쉘에서 실행됩니다. 이 작업을 수행하려면이 다른 스크립트도 소싱해야합니다.
.profile
다음과 같은 파일 을 소스로 제공해야 합니다 . $HOME/.profile
. 또한 스크립트를 소싱하여 시작해야합니다. 다음과 같은 사항. /path/to/yourscript