我有一些命令.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
。有解决方法吗?
我尝试了建议这里设置环境(例如 /bin/bash -lc 和 script-wrapper 脚本)。这似乎适用于脚本,但不适用于别名。
有任何想法吗?
答案1
来自有关别名的手册页:
注意,在非交互式 shell 中,别名默认不会展开, 可以通过设置“expand_aliases”来启用它 使用 shopt 的 shell 选项。
shopt -s expand_aliases
因此,请尝试在采购脚本的开头使用。这应该可以让您使用 Warner 的建议。
答案2
bash -c 与“source”应该可以工作:
0 11 * * * bash -c "source .profile && notify-team"
这也许也行得通。句号表示“来源”
0 11 * * * . .profile && notify-team
答案3
正如 Chris 所指出的,非交互式 shell 的默认 shell 选项是不扩展别名。这是我发现的一个可行的解决方案。
编写一个脚本,启用 shell 选项,并获取别名。特别要注意,这.bashrc
是在执行时获取的,这就是为什么在启用 expand_aliases 后必须再次获取它的原因。
对于最初错误的建议,我深表歉意。这比我最初预期的还要晦涩难懂。
脚本:
#!/bin/bash
shopt -s expand_aliases
source /home/wmoore/.bashrc
notify-team
答案4
实际上,你能做的最简单的事情就是创建
~/bin/notify-me 使用
#!/bin/sh
~/bin/notify.pl -u user1
〜/ bin / notify-team
#!/bin/sh
~/bin/notify.pl -u user1 user2 user3 user4 ....
正如您所见,shell 别名的维护和集成到其他系统非常复杂。最好的办法是将它们变成不会出现有趣的环境问题的完整命令。