programing

bash 스크립트에서 source를 사용할 때 'source: not found' 오류가 발생함

oldcodes 2023. 5. 9. 22:59
반응형

bash 스크립트에서 source를 사용할 때 'source: not found' 오류가 발생함

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

  1. virtualenv를 실행하여 $1의 비용으로 새로운 환경 생성
  2. 가상 환경 활성화
  3. 추가 작업 수행(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 ./.envsource .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

반응형