所以即时通讯有问题,我的脚本的这部分不工作。我不确定到底发生了什么,但是我感觉它是因为我没有逃过变量中的某些字符。我试过,没有运气以下:在sed表达式中的变量中转义字符
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变量是cu rrent工作目录
DIR='/home/admin/whatever'
和脚本变量只是脚本文件名
SCRIPT='test.sh'
我觉得这个问题是sed的语句未更新的crontab文件,因为它不是逃避它需要的字符到上面这些变量的里面。
这是正确的还是其他错误?
* UPDATE *
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 -
* UPDATE *
下面是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
三个转义变量实际上看起来不错。
* UPDATE *
的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'之前。 – devnull
可能重复的[转义sed搜索模式字符串](http://stackoverflow.com/questions/407523/escape-a-string-for-sed-search-pattern) – l0b0