在expect脚本的send命令中使用特殊字符“和`

在expect脚本的send命令中使用特殊字符“和`

我正在尝试在 Linux 服务器中执行一个命令来获取所有服务器都需要重置 root 密码,因为有多个服务器我正在使用期望脚本来自动化它,我的命令包含特殊字符,例如双引号和重音符号`。因此在执行时它会在双引号后给出额外的字符作为错误。

send " chage -l root | grep -i "Password expires" | if [[ `awk -F : '{print $2}' ` = "never" ]] ; then echo "password needs to be changed " ;else echo "skipping reset " ; fi;\r"

我尝试使用\双引号,但错误仍然相同

答案1

如果你想要一个没有插值的字符串(expect 使用的语言),并且它没有{}要扩展的字符或变量,然后将其括在{}.例如:

send { chage -l root | grep -i "Password expires" | if [[ `awk -F : '{print $2}' ` = "never" ]] ; then echo "password needs to be changed " ;else echo "skipping reset " ; fi;}
send \r

答案2

你把反斜杠放在哪里了?在所有引用上还是仅在像这样的内部引用上?

send " chage -l root | grep -i \"Password expires\" | if [[ `awk -F : '{print \$2}' ` = \"never\" ]] ; then echo \"password needs to be changed \" ;else echo \"skipping reset \" ; fi;\r"

是的,您还需要\一个$字符,因为该字符串将传递给命令,您不需要bash太早解析它。

相关内容