我在我的 ~/.bashrc 文件(Ubuntu 20)中导出了一个变量,我想在 cron 作业中使用它。在寻找答案时,我发现了两种方法,但没有一种方法对我有用:
12 11 * * * BASH_ENV=/home/l86/.bashrc bash -l -c 'echo "USING TOKEN $GITTOKEN" >> /var/log/custom-cron.log 2>&1'
并且
12 11 * * * source /home/l86/.bashrc; echo "USING TOKEN $GITTOKEN" >> /var/log/custom-cron.log 2>&1
但是变量值仍然被打印为空,当我在 cron 之外执行相同的命令(使用 shell)时,情况并非如此。
您的 crontab 没有在 BASH (/bin/bash) 中执行作业,很可能在应该指向 DASH 的普通 SH (/bin/sh) 中执行。所以你需要在 SO .. 上遵循这个解决方案,但是有几个没有明确提到的曲折:主要的是 .bashrc 仅在 shell 是交互式的情况下运行(这是好的原因)。您应该导出变量,并且可能需要使用转义的 $ 符号来引用它。所以在你的源文件中:
然后在你的 crontab 中你做
避免冗余的一种可能解决方案-如果您确实只需要在 .bashrc 中保密-您可以像这样重新捕获它(在该文件中不要多次出现字符串 GITTOKEN !):
要在运行 cronjob 时试验 ENV(-ironment) 的外观,您可以运行如下内容: