Zsh

在 zsh 和 bourne shell 之間共享環境變數(用於 crontab)

  • March 25, 2021

我在 .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_HOMEexport~/.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如果它實際上是(例如)bashdash. 正如Stéphane Chazelas在評論中指出的那樣,1) 如果它是 Bourne shell 或POSIXsh的實現,則沒有它(例如,在 {Free,Net,Open}BSD 上sh沒有選項);-l和 2) 並非所有支持的實現都會在給出該選項時-l讀取。~/.profile

引用自:https://unix.stackexchange.com/questions/640770