bash 스크립트에서 source를 사용할 때 'source: not found' 오류가 발생함
저는 다음과 같은 간단한 bash 스크립트를 작성하려고 합니다.
- virtualenv를 실행하여 $1의 비용으로 새로운 환경 생성
- 가상 환경 활성화
- 추가 작업 수행(django 설치, 가상 환경 경로에 django-admin.py 추가 등)
1단계는 잘 작동하지만 가상 환경을 활성화할 수 없습니다.가상 환경에 익숙하지 않은 사용자를 위해 가상 환경은activate
가상 환경을 활성화하는 파일입니다.CLI에서 다음을 사용하여 실행합니다.source
source $env_name/bin/activate
여기서 $env_name은 분명히 가상 환경이 설치된 dir의 이름입니다.
스크립트에서 가상 환경을 생성한 후 활성화 스크립트에 대한 경로를 다음과 같이 저장합니다.
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로 보장되지 않습니다.이로 인해 몇 년 전 Ubuntu(IIRC)에서 수많은 스크립트가 손상되었습니다.
내장된 소스는 bash에서 잘 작동하지만 Norman이 제안한 대로 점을 사용하는 것이 좋습니다.
POSIX 표준에서, 다음 중 무엇이./bin/sh
존중해야 합니다, 명령은..
(단일 점), 아님source
.그source
명령어는csh
-에 말려든 주의bash
.
해라
. $env_name/bin/activate
또는 비 POSIX가 필요한 경우bash
-코드 내의 isms, 사용#!/bin/bash
.
Ubuntu에서 스크립트를 실행하는 경우sh scriptname.sh
당신은 이 문제를 이해합니다.
다을사용스실시도행트크립여음으로 ../scriptname.sh
대신.
원본 파일의 전체 경로를 추가하는 것이 가장 좋습니다.
예를 들어
source ./.env
에 source .env
또는source /var/www/html/site1/.env
언급URL : https://stackoverflow.com/questions/670191/getting-a-source-not-found-error-when-using-source-in-a-bash-script
'programing' 카테고리의 다른 글
과거의 Git 커밋을 어떻게 만들 수 있습니까? (0) | 2023.05.09 |
---|---|
서비스를 클래스에 주입하는 방법(구성 요소가 아님) (0) | 2023.05.09 |
AzureStorageBLOB Server가 요청을 인증하지 못했습니다.서명을 포함하여 Authorization 헤더 값이 올바르게 형성되었는지 확인합니다. (0) | 2023.05.09 |
만방법드는의 첫 을 만드는 만방법드는의 첫 을 만드는 만방법드는의 첫 을 만드는 (0) | 2023.05.09 |
테이블에 고정된 잠금을 확인하는 방법 (0) | 2023.05.09 |