.zshrc에 정의된 별칭은 쉘 스크립트에 전파되지 않습니다.

.zshrc에 정의된 별칭은 쉘 스크립트에 전파되지 않습니다.

내 시스템에 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 pythonshebang 줄이 포함된 스크립트가 있고 다른 버전의 Python을 호출하려는 경우:

  1. 다음과 같은 디렉토리를 생성합니다.mkdir ~/myscript-bin
  2. 해당 디렉토리에 원하는 버전을 연결하세요.ln -s /usr/bin/python4.2 ~/myscript-bin/python
  3. 스크립트를 실행할 때 명령 검색 경로에서 이 디렉터리를 먼저 입력하세요.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를 모두 소싱하게 되었습니다. 나는 내 기능에 대해서도 똑같은 일을했습니다.

관련 정보