【问题标题】:Use sed to change the stdout of crontab line使用 sed 更改 crontab 行的标准输出
【发布时间】:2020-03-28 06:00:52
【问题描述】:

我尝试在脚本的标准输出上添加日期时间并重定向到文件。

我使用以下命令:

python3 script.py 2>&1 | sed -e "s/^/$(date + \%F \%T") /" > output.log

当我在 crontab 编辑器中添加此命令时,sed 命令不起作用! 你能帮我理解这个问题吗? 提前谢谢!

【问题讨论】:

  • 我在 % 附近添加了“\”,因为它似乎是 crontab 的特殊字符,但我通常从命令行运行:$(date + %F %T")
  • 好吧,你可以将你的命令包装在一个脚本中,但我的主要问题是,你为什么不使用 python 本身来更改日期格式并摆脱 sed ?
  • 因为我想在标准错误行上添加日期时间(重定向到标准输出)。你知道更好的方法吗?
  • 你能分享你的 Python 脚本吗?

标签: linux bash sed cron


【解决方案1】:

看起来有些引用问题。如果我正确理解了意图,我想你想要这个:

python3 script.py 2>&1 | sed -e "s/^/$(date "+ %F %T")/" > output.log

在命令替换 ($(...)) 中,您可以使用另一组引号。这就像自己运行命令并使用输出一样。您原来的命令替换命令是:

date + \%F \%T"

加上最后的额外引号,) 没有注册为终止命令替换,所以它实际上并没有终止,这显然是一个语法错误。

我认为你试图做的是逃避空格,这样就不需要像这样的额外引号:

date\ +\ %F\ %T

查看 shellcheck.net 以获取有关语法错误的帮助和一般建议。也可以下载程序直接在终端上使用。

【讨论】:

  • 非常感谢! shellcheck.net 非常有用!我遇到了语法错误,但是 % 是 crontab 的特殊字符,所以不管有没有它们都不起作用。
  • @M.Love 您可以使用 crontab 执行脚本而不是直接执行此命令。然后,将您需要的内容放入脚本中,您就不必担心 crontab 字符。
猜你喜欢
  • 2014-05-03
  • 2012-09-30
  • 2011-09-04
  • 1970-01-01
  • 2010-12-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多