salt cmdrun 特殊字符的转义

当用salt来远程执行命令的时候,需要将命令里的特殊字符进行转义处理,不然会导致命令无法正常执行。特别是需要输入密码的时候,可以用echo命令进行测试,方便查看是否正常处理。

  1. 需要输入!@#$1-1这种字符,如果不加转义,会直接报错。因为命令被!截断了。
  [root@salt-master-105 ~/electricity_control]# salt 'a.mysql.001' cmd.run "echo !@#$1-1"
-bash: !@#$1-1": event not found
  1. 尝试在!前加转义符\,可以正常执行,但是转义符也echo出来了,加两个\,也没有解决。最后发现在不加转义符,外层用单引号,内部用双引号,实现了。看来salt远程执行命令的时候,外层引号最好用单引号。
[root@salt-master-105 ~]# salt 'a.mysql.001' cmd.run "echo '\!@#$1-1'"
a.mysql.001:
    \!@#-1
[root@salt-master-105 ~]# salt 'a.mysql.001' cmd.run "echo '\\!@#\$1-1'"
a.mysql.001:
    \!@#$1-1
 [root@salt-master-105 ~]# salt 'a.mysql.001' cmd.run 'echo "!@#\$1-1"'
a.mysql.001:
    !@#$1-1

3.$1符号并没有正常输出,肯定是把$1当成是参数变量了,$符号前再加转义就没了。

[root@salt-master-105 ~]# salt 'a.mysql.001' cmd.run "echo '\!@#\$1-1'"
a.mysql.001:
    \!@#$1-1

你可能感兴趣的:(salt cmdrun 特殊字符的转义)