다음과 같은 간단한 bash 스크립트를 작성하려고합니다.
- virtualenv를 실행하여 $ 1에 새로운 환경을 만듭니다
- 가상 환경을 활성화
- 더 많은 일을하십시오 (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
대신 스크립트를 실행하십시오 .