加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 在sed表达式中的变量中转义字符

发布时间:2020-12-15 21:17:08 所属栏目:安全 来源:网络整理
导读:所以我有一个问题,我的脚本的这部分不起作用.我不确定到底发生了什么,但我感觉到它是因为我没有逃过变量中的某些字符.我试了以下没有运气: crontab -l | sed "s%$CTMP%*/$FREQ * * * * cd $DIR ./$SCRIPT%" | crontab - 以下是每个变量中的最新信息
所以我有一个问题,我的脚本的这部分不起作用.我不确定到底发生了什么,但我感觉到它是因为我没有逃过变量中的某些字符.我试了以下没有运气:

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

以某种方式看到所有抛出的额外垃圾?

解决方法

是的,问题可能是$CTMP包含星号,由sed解释为量词. .也是一个特殊的角色.尝试逃避它们:

CTMP_ESC=$(sed 's/[*.]/&/g' <<<"$CTMP")

然后使用CTMP_ESC代替CTMP.

此外,您不需要在sed命令中转义/,因为您没有将它用作s ///分隔符.

编辑:你还需要逃避&在替换中,因为sed解释&作为“匹配的字符串”.所以你的脚本应该是:

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 -

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读