在 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
(或cron.d
)中,以避免原则上的冗余。
更新2
我关注了这个会话,似乎标记为正确的答案并没有解决我的问题。
第二个答案对我来说有点不清楚——为什么要把这个条件语句放在(一些?)bashrc
文件中。
我还尝试了与bash.bashrc
(添加SHELL=/bin/bash
到开头的第三种解决方案crontab
,保存文件并获取bash.bashrc
但在* * * * * touch ~/myfiile
测试中没有变化。
因此,我要求重新提出这个问题,或者至少澄清一个答案。
中定义的变量
*.bashrc
是全局的,仅在它们可以被运行在 shell 中的程序读取的意义上,它们是由 shell 专门处理的。程序是否读取这些环境变量以及它们如何解释它们完全取决于设计,并且没有规定程序应如何处理环境变量的规定。简而言之,
cron
对 crontab 的解释方式是由程序cron
本身决定的。它决定不读取“全局”环境变量,而是使用自己的语法来定义“环境变量”。这是设计使然。如果您能理解为什么我们不能只${drt}
在 a 中使用CMakeLists.txt
,那么您应该能够理解为什么${drt}
在 crontab 中没有按照您期望的那样做。当然,如果您愿意,可以将以下行添加到您的crontab中。