문제

나는 쉘 스크립팅을 바래시하고 도전을 가로 지르고 있습니다.나는 다음과 같이하여 ".profile"파일을 다시로드 할 수 있습니다 :

. .profile
.

그러나 나는 쓰는 bash 스크립트에서 똑같이 실행하려고 노력하고 있습니다. 어떤 아이디어가 있습니까?명확히하기 위해 내가 제공 할 수있는 다른 것이 있습니까?

감사합니다

도움이 되었습니까?

해결책

현재 쉘을 다시로드하려면이 작업을 수행하십시오.

source ~/.profile
.

다른 팁

시도 :

cd 
source .bash_profile
.

재 장전 / 소스 ~ / .profile 파일을 시도 할 때 몇 가지 문제가 발생합니다. [이것은 Ubuntu Linux를 의미합니다. 어떤 경우에는 명령의 세부 사항이 다릅니다]

  1. 이 점을 터미널이나 스크립트에서 직접 실행 중입니까?
  2. 스크립트에서 어떻게 실행합니까?
  3. 광고. 1)

    터미널에서 직접 실행하면 서브 쉘이 생성되지 않음을 의미합니다. 따라서 두 명령을 사용할 수 있습니다.

    source ~/.bash_profile
    
    .

    또는

    . ~/.bash_profile
    
    .

    두 경우 모두에서는 .profile 파일의 내용으로 환경을 업데이트합니다.

    AD 2)

    를 호출하여 Bash 스크립트를 시작할 수 있습니다.
    sh myscript.sh 
    
    .

    또는

    . myscript.sh
    
    .

    첫 번째 경우에는 시스템의 환경 변수에 영향을 미치지 않고 서브 쉘 프로세스에만 볼 수있는 서브 쉘이 생성됩니다. SubShell 명령을 완료 한 후 수출 등의 번호가 적용되지 않습니다. 이것은 일반적인 실수이며 많은 개발자가 많은 시간을 잃을 수 있습니다.

    스크립트에 변경 사항이 적용되기 위해서는 전역 환경에 효과가 있으므로 스크립트를

    로 실행해야합니다.
    .myscript.sh
    
    .

    명령.

    스크립트가 하위 셸에서 런을 밝지 않은지 확인하려면이 기능을 사용할 수 있습니다. (다시 예는 Ubuntu 쉘을위한 것입니다)

    #/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
    }
    
    .

    이것은 일반적인 오해의 일부를 분명히하기를 바랍니다! :디 행운을 빌어!

bash 스크립트는 별도의 서브 쉘에서 실행됩니다.이 작업을 수행하려면이 작업을 수행해야합니다.

시도 :

#!/bin/bash
# .... some previous code ...
# help set exec | less
set -- 1 2 3 4 5  # fake command line arguments
exec bash --login -c '
echo $0
echo $@
echo my script continues here
' arg0 "$@"
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top