.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
대화형 셸에서 파생됩니다. 여기에는 별칭, 함수, 옵션, 키 바인딩 등을 설정하는 명령이 포함되어야 합니다.
답변2
나는 .zshrc와 별도로 쉘 함수 정의를 유지하는 것을 좋아합니다.
어쨌든 $PATH에 zsh 함수($HOME/.zsh)가 포함된 디렉토리를 포함시켜 emacs에서 쉘 함수에 액세스하는 데 행운이 있었습니다.
언제나 그렇듯, YMMV.