如何在我的crontab中使用我的别名?

我在.profile中有一些我想从我的crontab调用的命令。

例如,如果我有,

 alias notify-me="~/bin/notify.pl -u user1" alias notify-team="~/bin/notify.pl -u user1 user2 user3 user4 ...." 

我想只是调用别名

 0 11 * * * notify-team 

所以如果我的.profile的列表被更新,我也不必更新crontab 。 但是,我似乎无法在我的crontab使用别名。 有工作吗?

我在这里尝试了build立环境的build议(例如/ bin / bash -lc和脚本包装脚本)。 这似乎是适用于脚本,而不是别名。

有任何想法吗?

从关于别名的手册:

 注意在非交互式shell中,别名不会默认扩展,
它可以通过设置'expand_aliases'
shell选项使用shopt。

因此,请在采购脚本开始处使用shopt -s expand_aliases 。 这应该让你使用华纳的build议。

与“源”bash -c应该工作:

 0 11 * * * bash -c "source .profile && notify-team" 

这也可能工作。 期限是指“来源”

 0 11 * * * . .profile && notify-team 

正如Chris所认定的,非交互式shell的默认shell选项不会扩展别名。 这是我find的解决scheme。

编写一个脚本,启用shell选项,并input您的别名。 要特别注意的是.bashrc是在执行时才提供的,这就是为什么在启用expand_aliases之后必须重新find它。

我最初不正确的build议,我的道歉。 这比我最初预料的要难得多。

脚本:

 #!/bin/bash shopt -s expand_aliases source /home/wmoore/.bashrc notify-team 

我喜欢artifex从文件中获取别名然后重用它的想法,因为我找不到直接扩展/重用别名的方法。 (其他解决scheme仍然需要另一个脚本。)

所以我写了这个函数,并把它放在我的.profile中:

 grab-alias () { sed -n '/alias\s*'$1'\s*=/ {s/[^'\'']*.//;s/'\''\s*$//p}' /home/bentrupk/.profile; } 

然后,我可以在我的crontab中使用它,为这样的各种别名:

 0 11 * * * /bin/bash -lc 'x=`grab-alias notify-team`; $x' 0 7 * * * /bin/bash -lc 'x=`grab-alias notify-me`; $x' 

等等

是的,代码重用! 谢谢,所有。

真的,最简单的事情就是创build

〜/ bin /通知我

 #!/bin/sh ~/bin/notify.pl -u user1 

〜/ bin / notify-team与

 #!/bin/sh ~/bin/notify.pl -u user1 user2 user3 user4 .... 

正如你所看到的,shell别名的维护和整合到其他系统是复杂的。 最好的办法是把它们变成完整的命令,不会有有趣的环境问题。

 0 11 * * * bash -ic "notify-team" > /log/file 

为我工作