スクリプトを実行すると、.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。

関連情報