.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。