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

如何在我的 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。有解决方法吗?

我尝试了建议这里设置环境(例如 /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 别名的维护和集成到其他系统非常复杂。最好的办法是将它们变成不会出现有趣的环境问题的完整命令。

相关内容