sed 里面的expect脚本发送命令

sed 里面的expect脚本发送命令

我正在使用下面提到的sed内部expect脚本发送命令并收到以下错误。请让我知道我在这里缺少什么。

set new '"$Backend1Name"'
spawn ssh '"${userid}"'@'"$Backend1Name"'
expect "?*assword:*"
send '"$password\r"'
expect "?*~]# "
#puts [send -i $spawn_id "sed -i 's/\#rpc_address:.*/rpc_address:\ 10.31.201.219/' $file\r"]
send -i $spawn_id "sed -i 's/#rpc_address:.*/rpc_address:\ \$new/' /opt/APG/Databases/Cassandra/Default/conf/cassandra.yaml \r"
expect "?*~]# "

error:
sed: -e expression #1, char 30: unterminated `s' command

答案1

不太确定你想用这条线做什么

set new '"$Backend1Name"'

单引号在 Tcl/expect 中没有特殊含义:它们实际上是 $new 值的一部分。变量的值new将是:单引号、双引号、后端变量的值、双引号、单引号。如果您没有在expect 脚本中设置Backend1Name 变量,那么您应该会收到错误。

你可能想要

  • 如果您希望远程 shell 扩展变量

    set new {"$Backend1Name"}
    
  • 如果您希望期望脚本扩展变量,但您需要值中的双引号

    set new "\"$Backend1Name\""
    

我想知道您是否希望名称周围的文字双引号显示在 YAML 文件中。

您可能想看看第 5 课和第 6 课Tcl 教程

相关内容