【发布时间】:2013-06-24 19:05:39
【问题描述】:
所以我遇到了我的脚本的这一部分不起作用的问题。我不确定到底发生了什么,但我感觉它是因为我没有转义变量中的某些字符。我尝试了以下方法,但没有成功:
crontab -l | sed "s%$CTMP%\*\/$FREQ \* \* \* \* cd $DIR && \.\/$SCRIPT%" | crontab -
以下是每个变量的内容:
CTMP 变量只是 crontab 文件中的一行
CTMP='*/5 * * * * cd /home/admin/whatever && ./test.sh'
FREQ 变量是 cron 文件的时间(以分钟为单位)设置
FREQ=5
DIR 变量是当前工作目录
DIR='/home/admin/whatever'
SCRIPT 变量就是脚本文件名
SCRIPT='test.sh'
我觉得问题在于 sed 语句没有更新 crontab 文件,因为它没有转义上面这些变量中所需的字符。
这是正确的还是其他错误?
* 更新 *
CTMPESC=$(sed 's/[\*\.]/\\&/g' <<<"$CTMP")
DIRESC=$(sed 's/[\*\.]/\\&/g' <<<"$DIR")
SCRIPTESC=$(sed 's/[\*\.]/\\&/g' <<<"$SCRIPT")
crontab -l | sed "s%$CTMPESC%\*/$FREQ \* \* \* \* cd $DIRESC && \./$SCRIPTESC%" | crontab -
* 更新 *
这是 crontab 输出
*/10 * * * * cd /home/administrator/anm-1.5.0 */7 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh*/7 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh ./anm.sh
我还回应了三个转义变量只是为了排除故障,它们是:
\*/7 \* \* \* \* cd /home/administrator/anm-1\.5\.0 && \./anm\.sh
/home/administrator/anm-1\.5\.0
anm\.sh
三个转义变量实际上看起来不错。
* 更新 *
替换前的 Cron 文件:
*/10 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh
替换后的cron文件:
*/7 * * * * cd /home/administrator/anm-1.5.0 */10 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh*/10 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh ./anm.sh
看到所有以某种方式被扔到那里的额外垃圾吗?
【问题讨论】:
-
尝试设置
noblog。set -f之前设置CTMP。