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

Kei*_*rup 21 shell alias cron

我有一些命令.profile,我想从我的crontab.

例如,如果我有,

alias notify-me="~/bin/notify.pl -u user1"
alias notify-team="~/bin/notify.pl -u user1 user2 user3 user4 ...."
Run Code Online (Sandbox Code Playgroud)

我只想调用别名

0 11 * * * notify-team
Run Code Online (Sandbox Code Playgroud)

因此,如果 my 中的列表.profile已更新,我也不必更新crontab. 但是,我似乎无法在我的crontab. 有解决办法吗?

我尝试了这里的建议来设置环境(例如 /bin/bash -lc 和脚本包装器脚本)。似乎这适用于脚本但不适用于别名。

有任何想法吗?

Chr*_*rel 10

从关于别名的联机帮助页:

注意别名在非交互式 shell 中默认不展开,
它可以通过设置“expand_aliases”来启用
使用 shopt 的 shell 选项。

因此,请尝试shopt -s expand_aliases在采购脚本的开头使用。这应该让你使用华纳的建议。


Col*_*son 8

带有“源”的 bash -c 应该可以工作:

0 11 * * * bash -c "source .profile && notify-team"
Run Code Online (Sandbox Code Playgroud)

这也可能有效。句号的意思是“来源”

0 11 * * * . .profile && notify-team
Run Code Online (Sandbox Code Playgroud)


War*_*ner 6

正如 Chris 所指出的,非交互式 shell 的默认 shell 选项是不扩展别名。这是我发现可行的解决方案。

编写脚本,启用 shell 选项,并获取别名。请特别注意它.bashrc是在执行时获取的,这就是为什么在启用 Expand_aliases 后必须再次获取它的原因。

对于最初的错误建议,我深表歉意。这比我最初预期的更加晦涩难懂。

脚本:

#!/bin/bash
shopt -s expand_aliases
source /home/wmoore/.bashrc
notify-team
Run Code Online (Sandbox Code Playgroud)