crontab 没有获取 bash.bashrc 变量

crontab 没有获取 bash.bashrc 变量

在 Ubuntu 16.04 Bash 4.3.46(1) 的末尾,/etc/bash.bashrc我声明了以下变量:

drt="/var/www/html"

我找到了该文件(source /etc/bash.bashrc

我执行crontab -e并添加只是为了测试* * * * * touch /var/www/html/myFile.sh。这有效,但* * * * * touch ${drt}/myFile.sh没有。

如果 中 声明的变量bash.bashrc是全局变量,为什么它不被 处理crontab

更新1

我不想将流复制drt="/var/www/html"crontab(or cron.d) 以避免原则上的冗余。

更新2

我跟着本次会议看来标记为正确的答案并没有解决我的问题。

第二个答案我有点不清楚 - 为什么要把这个条件语句放在(某些?)bashrc文件中。

bash.bashrc我还尝试了与(添加SHELL=/bin/bash到最开始的)有关的第三个解决方案crontab,保存了文件并获取了来源,bash.bashrc但在测试中没有任何变化* * * * * touch ~/myfiile

因此,我要求重新讨论这个问题,或者至少澄清其中的答案。

答案1

中定义的变量*.bashrc只是全局变量,因为它们可以被 shell 中运行的程序读取,并且它们由 shell 专门处理。程序是否读取这些环境变量以及它们如何解释它们完全取决于设计,并且没有规定程序应如何处理环境变量。

简而言之,croncrontab 的解释方式是由程序cron本身决定的。它决定不读取“全局”环境变量,而是使用自己的语法来定义“环境变量”。这是设计使然。如果您能理解为什么我们不能只${drt}在 a 中使用CMakeLists.txt,那么您应该能够理解为什么${drt}in crontab 不执行您期望的操作。

当然,您可以将以下行添加到您的定时任务如果你希望。

drt="/var/www/html"

相关内容