AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 119273
In Process
Keith Bentrup
Keith Bentrup
Asked: 2010-03-05 10:31:51 +0800 CST2010-03-05 10:31:51 +0800 CST 2010-03-05 10:31:51 +0800 CST

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

  • 772

我有一些.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 脚本)。似乎这适用于脚本但不适用于别名。

有任何想法吗?

cron shell alias
  • 7 7 个回答
  • 20928 Views

7 个回答

  • Voted
  1. Christopher Karel
    2010-03-05T12:39:05+08:002010-03-05T12:39:05+08:00

    从有关别名的手册页中:

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

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

    • 11
  2. Collin Anderson
    2013-06-04T10:47:38+08:002013-06-04T10:47:38+08:00

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

    0 11 * * * bash -c "source .profile && notify-team"
    

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

    0 11 * * * . .profile && notify-team
    
    • 8
  3. Warner
    2010-03-05T10:44:36+08:002010-03-05T10:44:36+08:00

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

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

    对于最初不正确的建议,我深表歉意。这比我最初预期的要晦涩难懂。

    脚本:

    #!/bin/bash
    shopt -s expand_aliases
    source /home/wmoore/.bashrc
    notify-team
    
    • 4
  4. Keith Bentrup
    2010-03-06T20:20:47+08:002010-03-06T20:20:47+08:00

    我喜欢 artifex 从文件中获取别名然后重用它的想法,因为我找不到直接扩展/重用别名的方法。(其他解决方案仍然需要另一个脚本。)

    所以我写了这个函数并把它放在我的.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'
    

    等等

    是的,代码重用!谢谢大家。

    • 1
  5. Justin
    2010-03-06T21:43:43+08:002010-03-06T21:43:43+08:00

    你能做的最简单的事情就是创造

    ~/bin/notify-me 与

    #!/bin/sh
    ~/bin/notify.pl -u user1
    

    ~/bin/notify-team 与

    #!/bin/sh
    ~/bin/notify.pl -u user1 user2 user3 user4 ....
    

    如您所见,shell 别名很难维护和集成到其他系统中。最好的办法是将它们变成完全成熟的命令,不会有有趣的环境问题。

    • 1
  6. SuperGeek
    2019-12-21T01:25:51+08:002019-12-21T01:25:51+08:00

    bash -ic "notify-team" 是最好的选择。它使别名在 crontab 中可用。您可以进一步添加 & 作为背景,因为我们正在使用带有 -i 的“交互式”shell,但实际上不与它交互。

    • 0
  7. vakhrymchuk
    2016-11-05T01:31:40+08:002016-11-05T01:31:40+08:00
    0 11 * * * bash -ic "notify-team" > /log/file
    

    为我工作

    • -3

相关问题

  • 每 4 小时运行一次 cron 的正确语法是什么?[复制]

  • 用于 mysql 数据库清理和备份的 crontab

  • Windows cron 作业

  • 使用 crontab 和 /etc/cron.hourly,daily,weekly 的区别

  • crontab ifconfig 什么都不输出

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve