有沒有人在這裏看到任何語法錯誤?Bash sed從cron刪除一行
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 sed從cron刪除一行
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'
這裏發生的是CTMPESC
中的一個斜槓關閉了模式,並且它後面的任何內容都被解釋爲一個命令。你也需要避開斜線。
添加/
到類的人物,你逃脫
CTMPESC=$(sed 's/[\*\.&/]/\\&/g' <<<"$CTMP")
如果你想這樣做,在利用bash的能力的一種方式,有沒有需要外部工具,如grep的或sed的根本:
ctmp_content=$(<"$ctmp")
crontab -l | while read -r; do
[[ $REPLY = *"$ctmp_content"* ]] && continue
printf '%s\n' "$REPLY"
done | crontab -
......或者他們可以以不接受正則表達式的方式進行刪除,因此根本不需要任何轉義,這樣更合理。例如,想想'grep -F -v'。 –
@CharlesDuffy真。但是這個問題是其中的一個,OP也在crontabs上替換了它(使用sed)。無論如何,這是一個非常健全的評論。 –
卓越點查爾斯!列弗讓我把注意力集中在以前的問題上,對於這個完全相同的腳本,我完全忘記了簡單的解決方案。這兩方面都做得很好,但最終還是採用了grep解決方案。謝謝大家! – Atomiklan