내 시스템에 Python이 설치되어 있습니다 python3
. 내 .zshrc
파일에 다음 별칭을 정의했습니다.
alias python=python3
이렇게 하면 명령줄에서 실행할 수 있습니다 python3
.python
$ python
Python 3.11.6 (main, Nov 2 2023, 04:39:43) [Clang 14.0.3 (clang-1403.0.22.14.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
하지만 다음과 같은 쉘 스크립트를 작성하면 test.sh
:
#!/bin/bash
python
그런 다음 다음과 같이 이 스크립트를 실행해 보세요.
$ ./test.sh
나는 얻다:
./test.sh: line 2: python: command not found
어떻게 되어가나요? 어떻게 해결할 수 있나요? 분명히 말하면 이것은 Mac에서이지만 결과는 Linux에서도 동일해야 한다고 생각합니다. 감사해요.
답변1
별칭과 함수는 쉘 스크립트로 전파되지 않습니다. 이것은 의도적으로 설계된 것입니다. 이를 통해 표준 명령 이름에 대한 비표준 동작을 정의할 수 있습니다. 이를 스크립트에 제공하면 스크립트가 중단될 수 있습니다. 이는 명령에 기본 옵션을 추가하는 데 자주 사용되는 별칭의 경우 특히 그렇습니다.
스크립트에 다른 이름의 명령이 필요한 경우 에서 실행하십시오 $PATH
. 스크립트에 비표준 버전의 명령이 필요한 경우 전용 디렉토리를 사용하여 스크립트를 실행하십시오. 예를 들어, python
명시적으로 호출되는 스크립트나 #!/usr/bin/env python
shebang 줄이 포함된 스크립트가 있고 다른 버전의 Python을 호출하려는 경우:
- 다음과 같은 디렉토리를 생성합니다.
mkdir ~/myscript-bin
- 해당 디렉토리에 원하는 버전을 연결하세요.
ln -s /usr/bin/python4.2 ~/myscript-bin/python
- 스크립트를 실행할 때 명령 검색 경로에서 이 디렉터리를 먼저 입력하세요.
PATH=~/myscript-bin:$PATH myscript
Python의 경우 여러 버전을 보유하는 데 도움이 되는 도구, 특히 라이브러리 관리에 도움이 되는 도구가 많이 있습니다. 스크립트에 기본이 아닌 Python 버전이나 기본이 아닌 Python 라이브러리 세트가 필요한 경우가상 환경그것을 위해.
python4.2 -m venv ~/myscript-env
# If the script needs extra packages:
(. ~/myscript-env/activate && pip install package1 package2)
(. ~/myscript-env/activate && myscript)
답변2
Ed가 설명했듯이 zsh와 bash는 서로 다른 두 가지 환경입니다. Apple이 기본 셸을 zsh로 변경하고 여전히 bash에서 셸 스크립트를 작성하므로 별칭을 .alias 파일에 넣은 다음 .zshrc와 .bashrc를 모두 소싱하게 되었습니다. 나는 내 기능에 대해서도 똑같은 일을했습니다.