我在.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
为我工作