有人看到这里的语法有什么问题吗?
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'
如果您想以利用 bash 功能的方式执行此操作,则根本不需要 grep 或 sed 等外部工具:
ctmp_content=$(<"$ctmp")
crontab -l | while read -r; do
[[ $REPLY = *"$ctmp_content"* ]] && continue
printf '%s\n' "$REPLY"
done | crontab -
这里发生的情况是,其中一个斜杠CTMPESC
关闭了模式,之后出现的任何内容都被解释为命令。你也需要避开斜线。
添加/
到您转义的字符类别:
CTMPESC=$(sed 's/[\*\.&/]/\\&/g' <<<"$CTMP")