在 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 专门处理。程序是否读取这些环境变量以及它们如何解释它们完全取决于设计,并且没有规定程序应如何处理环境变量。
简而言之,cron
crontab 的解释方式是由程序cron
本身决定的。它决定不读取“全局”环境变量,而是使用自己的语法来定义“环境变量”。这是设计使然。如果您能理解为什么我们不能只${drt}
在 a 中使用CMakeLists.txt
,那么您应该能够理解为什么${drt}
in crontab 不执行您期望的操作。
当然,您可以将以下行添加到您的定时任务如果你希望。
drt="/var/www/html"