在从crontab调用的脚本中获取.bash_aliases之后没有看到别名

时间:2015-06-23 19:34:02

标签: bash environment-variables alias crontab

我在/ 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

2 个答案:

答案 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