我有一些.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 脚本)。似乎这适用于脚本但不适用于别名。
有任何想法吗?
从有关别名的手册页中:
因此,请尝试
shopt -s expand_aliases
在您的采购脚本开始时使用。这应该让您使用华纳的建议。带有“源”的 bash -c 应该可以工作:
这也可能有效。句号的意思是“来源”
正如 Chris 所指出的,非交互式 shell 的默认 shell 选项是不扩展别名。这是我发现可行的解决方案。
编写脚本,启用 shell 选项,并获取别名。请特别注意,它
.bashrc
是在执行时获取的,这就是为什么在启用 expand_aliases 后必须再次获取它的原因。对于最初不正确的建议,我深表歉意。这比我最初预期的要晦涩难懂。
脚本:
我喜欢 artifex 从文件中获取别名然后重用它的想法,因为我找不到直接扩展/重用别名的方法。(其他解决方案仍然需要另一个脚本。)
所以我写了这个函数并把它放在我的.profile中:
然后我可以在我的 crontab 中将它用于各种别名,如下所示:
等等
是的,代码重用!谢谢大家。
你能做的最简单的事情就是创造
~/bin/notify-me 与
~/bin/notify-team 与
如您所见,shell 别名很难维护和集成到其他系统中。最好的办法是将它们变成完全成熟的命令,不会有有趣的环境问题。
bash -ic "notify-team" 是最好的选择。它使别名在 crontab 中可用。您可以进一步添加 & 作为背景,因为我们正在使用带有 -i 的“交互式”shell,但实际上不与它交互。
为我工作