Zsh
在 zsh 和 bourne shell 之間共享環境變數(用於 crontab)
我在 .zshrc 中設置了 JAVA_HOME:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
這對於互動式程序來說很好。但是我有通過 cron 執行的 JVM 程序,它使用 Bourne shell。bourne shell 程序不斷給我這個:
groovy: JAVA_HOME is not defined correctly, can not execute: /usr/lib/jvm/default-java/bin/java
解決這個問題的最巧妙方法是什麼?我不記得以前不必擔心這個。目前,我正在為每個 crontab 條目設置 JAVA_HOME,這既繁瑣又多餘。
假設您指的是您自己使用者的 crontab,為避免重複定義您可以在
JAVA_HOME
(export
而~/.zshenv
不是如果合適的話,你的問題中稱為“Bourne shell”的程序實際上是什麼)。~/.zshrc``zsh -c 'sh /path/to/script'``sh
或者,如果您可以
JAVA_HOME
在多個位置進行定義並且您的sh
實現支持此1,您可以通過附加到腳本的 shebang 或將 cron 作業的命令export
更改~/.profile
為.sh``-l``sh -l /path/to/script
雖然,最後,最方便的解決方案可能是簡單地添加
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
作為 crontab 頂部的一行(
JAVA_HOME
當然,除非您有不同的 cron 作業需要不同的 值)。1 您
sh
的不太可能是“真正的”Bourne shell,-l
如果它實際上是(例如)bash
或dash
. 正如Stéphane Chazelas在評論中指出的那樣,1) 如果它是 Bourne shell 或POSIXsh
的實現,則沒有它(例如,在 {Free,Net,Open}BSD 上sh
沒有選項);-l
和 2) 並非所有支持的實現都會在給出該選項時-l
讀取。~/.profile