sed dentro espera comando de envio de script

1

Estou usando o comando sed inside expect script send como mencionado abaixo e obtendo o erro abaixo. Por favor, deixe-me saber o que estou perdendo aqui.

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
    
por Velan 08.07.2017 / 13:33

1 resposta

1

Não tenho certeza do que você está tentando fazer com essa linha

set new '"$Backend1Name"'

As aspas simples não têm significado especial em Tcl / expect: elas são literalmente parte do valor $ new. O valor da variável new será: aspas simples, aspas duplas, valor da variável Backend, aspas duplas, aspas simples. Se você não tiver definido a variável Backend1Name no script expect, você deve estar recebendo um erro.

Você provavelmente quer

  • se você quiser que o shell remoto expanda a variável

    set new {"$Backend1Name"}
    
  • se você quiser que o script expect expanda a variável, mas precisará das aspas duplas no valor

    set new "\"$Backend1Name\""
    

Eu questiono se você quer que as aspas duplas em torno do nome apareçam no arquivo YAML.

Você pode dar uma olhada nas lições 5 e 6 do tutorial do Tcl

    
por 08.07.2017 / 14:19