【发布时间】:2018-06-24 12:24:46
【问题描述】:
我有 crontab,我需要它来在这个 bash 脚本中获取全局 bash 我导出在其他脚本中使用的全局 EVN 变量 问题是,当我从 crontab 脚本调用脚本时,它会忽略 导出全局 EVN 变量。
这里是 config.sh,它的路径是:/home/user/scripts,我不能把它移到其他目录。
#!/bin/bash
PATH=$PATH:/home/user/.local/bin:/home/user/bin:$PWD
#Tests path
export MAIN_PATH=/home/user/setup/work
还有 crontab 脚本
#!/bin/bash
PATH=$PATH:/home/user/.local/bin:/home/user/bin:$PWD
source $PWD/config.sh
#remove previous crontab
crontab -r
#set crontab
(echo "27 11 * * * $MAIN_PATH/run-from-crontab.sh") | crontab -
#print loaded crontab
sudo crontab -u user -l
并且在 run-from-crontab.sh 中
#!/bin/bash
PATH=$PATH:/home/user/.local/bin:/home/user/bin:$PWD
source $PWD/config.sh
$MAIN_PATH/scripts/test.sh
此时我希望 MAIN_PATH 将保存导出的 MAIN_PATH 值 但我得到了:
/home/user/setup/work/scripts/run-from-crontab.sh: line 3: /home/user/config.sh:
No such file or directory
chmod: cannot access ‘//scripts’: No such file or directory
为什么MAIN_PATH 没有传递给工作脚本?
【问题讨论】:
-
看起来你的 config.sh 没有得到来源,在你的错误输出中,shell 说它没有找到 /home/user/config.sh。尝试修复它,它应该可以工作。
-
不幸的是,我不能将 config.sh 放在其他脚本目录中,它应该与所有其他应用程序目录一起存在
-
你有办法知道确定config.h在哪里吗?如果你这样做了,那么从那里获取它,例如,如果它总是在 /home/user 中,那么不要执行 $PWD/config.sh,将其更改为 /home/user/config.sh。或者,也许您获得了路径的某些部分,例如“用户”,然后您从中构造配置文件路径,例如,
. "/home/$username/config.sh"或类似的。 -
我尝试做一些动态的东西
-
不要相信 $PWD。相反,请参阅保证由 cron 设置的 ${HOME}。