【问题标题】:Extracting line from crontab using grep or something similar使用 grep 或类似的东西从 crontab 中提取行
【发布时间】:2013-06-24 16:52:15
【问题描述】:

如何使用 grep 从 crontab 文件中提取一行并将其存储到变量中?这不起作用:

CTMP=$(crontab -l | grep $SCRIPT)

$SCRIPT 是程序中定义的另一个变量。示例 anm.sh 这是我在 crontab 中搜索的内容,以确定我需要提取的行。

谢谢!

* 更新 *

它在做一些非常奇怪的事情。我试过这个:

CTMP=$(crontab -l | grep "anm.sh")

这是我的 crontab 的样子:

*/17 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh

但是,当我回显 CTMP 时,它随机包含一堆毫无意义的信息。它以某种方式提取当前工作目录中的目录名称。这是输出:

*/17 anm.cfg anm.sh databases logs tmp anm.cfg anm.sh databases logs tmp anm.cfg anm.sh databases logs tmp anm.cfg anm.sh databases logs tmp cd /home/administrator/anm-1.5.0 && ./anm.sh

那些目录名确实存在,但它为什么要拉那些目录名???

我需要做的就是从存储到变量 CTMP 的 crontab 文件中获取该行

谢谢

【问题讨论】:

  • 你确定你列出了正确的 crontab 的内容吗?每个用户都有自己的。你的代码行对我来说似乎没问题。
  • 您导出了 SCRIPT 吗?
  • 更新了我上面的帖子。

标签: bash grep


【解决方案1】:

我认为问题出在 ECHO 语句中。

当你做crontab -l | grep "anm.sh":
CTMP="*/17 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh"

echo $CTMP
<<bunch of dir names>>

echo "$CTMP"
*/17 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh

在回显时引用变量。

【讨论】:

【解决方案2】:

您可能想要关闭通配符(正在解释星号)。

或许,您也应该使用引号。

CTMP="$(set -f; crontab -l | grep 'anm.sh')"

【讨论】:

  • @Marki - 您已经确定了问题的原因,但是您需要在 CTMP 扩展时(即通过 $CTMP)抑制通配...而不是在设置时。
  • @StephenC 你是完全正确的。我已经在主外壳中抑制了 globbing,因此它在我的盒子上工作。呵呵。
猜你喜欢
  • 2021-11-04
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多