1

有人看到这里的语法有什么问题吗?

CTMPESC=$(sed 's/[\*\.&]/\\&/g' <<<"$CTMP")
crontab -l | sed "/$CTMPESC/d" | crontab -

CTMP 相当于一个简单的 cron 语句,如下所示:

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

我不断收到错误消息:

sed:-e 表达式 #1,字符 5:未知命令:`8'

4

2 回答 2

2

如果您想以利用 bash 功能的方式执行此操作,则根本不需要 grep 或 sed 等外部​​工具:

ctmp_content=$(<"$ctmp")
crontab -l | while read -r; do
  [[ $REPLY = *"$ctmp_content"* ]] && continue
  printf '%s\n' "$REPLY"
done | crontab -
于 2013-06-24T12:34:21.813 回答
1

这里发生的情况是,其中一个斜杠CTMPESC关闭了模式,之后出现的任何内容都被解释为命令。你也需要避开斜线。

添加/到您转义的字符类别:

CTMPESC=$(sed 's/[\*\.&/]/\\&/g' <<<"$CTMP")
于 2013-06-24T12:27:24.650 回答