스크립트를 실행할 때 .zshrc에 정의된 함수를 찾을 수 없습니다.

스크립트를 실행할 때 .zshrc에 정의된 함수를 찾을 수 없습니다.

.zshrc주요 업데이트 기능이 있습니다 PATH.

my_function()
{
        PATH=...
}

my_script.sh다음으로 시작하는 다음 줄 과 같이 이에 의존하는 일부 스크립트 :

my_function
# do stuff ...

그런 다음 다음이 있습니다 crontab.

00 02 * * * /path/to/my/zsh /path/to/my_script.sh

하지만 수동으로 실행하더라도 my_script.sh( ./my_script.sh즉, 대화형(?) Zsh 셸에서) 오류가 발생한다는 것을 알았습니다.

Command not found: my_function

my_function비록 터미널에서 완벽하게 전화를 걸 수는 있지만.

왜? 나는 해결책을 원한다아니요내 스크립트에 shebang을 추가해야 합니다(자세한 내용은이것)

확립된아래 그림과 같이. 제 경우에는 cron이 비대화형, 비로그인 쉘을 시작한 것 같습니다. 이것이 바로 초기화 파일이 실행되지 않은 이유입니다. 그렇죠?

여기에 이미지 설명을 입력하세요.

답변1

에 기능을 넣으세요 .zshenv.

.zshenv-f이 옵션을 설정하지 않으면 쉘에 대한 모든 호출에서 소스를 얻습니다. 여기에는 명령 검색 경로를 설정하는 명령과 기타 중요한 환경 변수가 포함되어야 합니다. .zshenv출력을 생성하거나 쉘이 tty에 연결되어 있다고 가정하는 명령을 포함해서는 안 됩니다.

.zshrc대화형 셸에서 파생됩니다. 여기에는 별칭, 함수, 옵션, 키 바인딩 등을 설정하는 명령이 포함되어야 합니다.

http://zsh.sourceforge.net/Intro/intro_3.html

답변2

나는 .zshrc와 별도로 쉘 함수 정의를 유지하는 것을 좋아합니다.

어쨌든 $PATH에 zsh 함수($HOME/.zsh)가 포함된 디렉토리를 포함시켜 emacs에서 쉘 함수에 액세스하는 데 행운이 있었습니다.

언제나 그렇듯, YMMV.

관련 정보