我在/ tmp / get_env中有以下内容:
joeuser@doghouse:> cat /tmp/get_env
source /home/joeuser/.bash_aliases
env > /tmp/joeuser.env
alias > /tmp/joeuser.alias
echo $PATH > /tmp/joeuser.path
我的用户crontab中有以下内容:
joeuser@doghouse:> crontab -l
* * * * * /tmp/get_env
我可以看到crontab正确触发并执行脚本:
joeuser@doghouse:> ls /tmp/joeuser.*
-rw-rw-r-- 1 joeuser joeuser 0 Jun 23 12:23 joeuser.alias
-rw-rw-r-- 1 joeuser joeuser 106 Jun 23 12:23 joeuser.env
-rw-rw-r-- 1 joeuser joeuser 14 Jun 23 12:23 joeuser.path
但.bash_aliases中没有任何定义出现在任何文件中。
我也试过直接在crontab中采购.bash_aliases,结果相同。
* * * * * source ~/.bash_aliases; /tmp/get_env
经过一个小时的回顾,其他几件事可能会因为cronjobs而出错,我仍然无法理解为什么我无法从.bash_aliases看到这样的定义?
joeuser@doghouse:> cat /home/joeuser/.bash_aliases
alias rmi='rm -i'
export ANSWER=42
答案 0 :(得分:1)
好的,我明白了。 cron在sh中运行,而不是bash,当我将/ tmp / get_env的第一行更改为'source /home/gitwatch/.bash_aliases 2>时,我发现了/ tmp / source_error'未定义'source'命令(并且所有语法都不同)。
添加一个sh'bang'#!/ bin / bash'作为/ tmp / get_env的第一行解决了这个问题。
答案 1 :(得分:0)
来自man alias
的输出:
默认情况下,非交互式shell中不会展开别名,并且 可以通过使用设置
expand_aliases
shell选项来启用它shopt
。
/tmp/get_env
的第一个命令应该是:
shopt -s expand_aliases