Programing

bash 스크립트에서 소스를 사용할 때 '소스 : 찾을 수 없음'오류 표시

lottogame 2020. 6. 14. 10:24
반응형

bash 스크립트에서 소스를 사용할 때 '소스 : 찾을 수 없음'오류 표시


다음과 같은 간단한 bash 스크립트를 작성하려고합니다.

  1. virtualenv를 실행하여 $ 1에 새로운 환경을 만듭니다
  2. 가상 환경을 활성화
  3. 더 많은 일을하십시오 (django 설치, django-admin.py를 virtualenv의 경로 등에 추가하십시오)

1 단계는 잘 작동하지만 virtualenv를 활성화 할 수 없습니다. virtualenv에 익숙하지 않은 사용자를 activate위해 가상 환경을 활성화 하는 파일을 만듭니다 . CLI에서 다음을 사용하여 실행합니다.source

source $env_name/bin/activate

여기서 $ env_name은 가상 env가 설치된 디렉토리의 이름입니다.

내 스크립트에서 가상 환경을 만든 후 다음과 같이 활성화 스크립트의 경로를 저장합니다.

activate="`pwd`/$ENV_NAME/bin/activate"

그러나 전화 source "$activate"하면 다음과 같이됩니다.

/home/clawlor/bin/scripts/djangoenv: 20: source: not found

$activate활성화 스크립트의 올바른 경로 포함되어 있음을 알고 있습니다. 실제로 전화하기 전에 파일이 있는지 테스트합니다 source. 그러나 source그 자체는 그것을 찾을 수없는 것 같습니다. 또한 CLI에서 모든 단계를 수동으로 실행하여 모든 것이 올바르게 작동했습니다.

내 연구 에서이 스크립트를 찾았습니다. 이 스크립트 는 내가 원하는 것과 비슷하지만 모든 가상 환경을 ~ / .virtualenv 디렉토리에 저장하는 것과 같이 필요하지 않은 다른 많은 일을하고 있습니다. $ WORKON_HOME). 그러나 그는 나에게 길을 만들고 기본적으로 같은 방식으로 activate전화 source "$activate"하는 것 같습니다.

전체 스크립트는 다음과 같습니다.

#!/bin/sh

PYTHON_PATH=~/bin/python-2.6.1/bin/python

if [ $# = 1 ]
then
    ENV_NAME="$1"
    virtualenv -p $PYTHON_PATH --no-site-packages $ENV_NAME
    activate="`pwd`/$ENV_NAME/bin/activate"

    if [ ! -f "$activate" ]
    then
        echo "ERROR: activate not found at $activate"
        return 1
    fi

    source "$activate"
else
    echo 'Usage: djangoenv ENV_NAME'
fi

면책 조항 : 내 bash script-fu는 꽤 약합니다. CLI에 상당히 익숙하지만 이것이 작동하지 않는 매우 어리석은 이유가있을 수 있습니다.


bash 스크립트를 작성하는 경우 이름으로 호출하십시오.

#!/bin/bash

/ bin / sh는 bash임을 보증하지 않습니다. 이로 인해 몇 년 전 우분투 (IIRC)에서 스크립트가 깨졌습니다.

소스 내장은 bash에서 잘 작동합니다. 그러나 Norman이 제안한 것처럼 점을 사용할 수도 있습니다.


고려해야 할 POSIX 표준 /bin/sh에서 명령은 .(단일 점)이 아닙니다 source. source명령은 csh안으로 들어간 -ism입니다 bash.

시험

. $env_name/bin/activate

또는 bash코드에 비 POSIX가 있어야하는 경우을 사용하십시오 #!/bin/bash.


우분투에서 스크립트를 실행하면 sh scriptname.sh이 문제가 발생합니다.

./scriptname.sh대신 스크립트를 실행하십시오 .

참고 URL : https://stackoverflow.com/questions/670191/getting-a-source-not-found-error-when-using-source-in-a-bash-script

반응형