这个问题让我感到厌倦了一整天......
我想自动修改root的环境变量$ bai,然后编写一个shell脚本并将其添加到root的crontab中。但是$ bai没有改变。
这是我的脚本/root/111.sh:
#!/bin/bash
time=`date`
export bai=$time
这是crontab:
*/1 * * * * . /root/111.sh
然后echo $bai
为空
但是当我source /root/111.sh
和echo $bai
时,它可以获得时间:Wed Dec 24 17:02:48 CST 2014
那么如何在我的cron作业中使用它来获取环境变量呢?
答案 0 :(得分:2)
您无法在不同的流程中更改变量。可能你离你最近的就是使用一个像这样的文件。
在crontab
:
* * * * * /bin/date > /tmp/value.txt
在其他一些剧本中:
#!/bin/bash
while :; do
v=$(cat /tmp/value.txt)
echo $v
sleep 1
done
答案 1 :(得分:1)
我想你要做的是修改导出的变量。但是,子进程无法修改父进程的环境。设置变量的唯一方法是从父。
答案 2 :(得分:1)
问题是因为你有两种不同的bash。 crontab发出命令并将变量$bai
导出到刚刚打开的当前会话,然后退出,并使用初始化的$bai
,这就是为什么当你通过发布{ {1}}您看到source /root/111.sh
已创建,因为您正在bash会话中创建变量。
如果您希望每次打开bash会话时都拥有$bai
变量,则需要通过添加
$bai
文件中
.bashrc
如果您发出echo "export bai=\`date\`" >> ~/.bashrc
,每次启动bash时,您都会获得日期...但是如果您希望每{x}次更新echo $bai
变量,那么此方法是不正确,因为它会在您登录时保留日期,而crontab因为我的第一个解释而无法帮助您。