sedの期待されるスクリプトはコマンドを送信します。

sedの期待されるスクリプトはコマンドを送信します。

以下の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一重引用符、二重引用符、バックエンド変数値、二重引用符、一重引用符です。予想されるスクリプトで Backend1Name 変数を設定しないと、エラーが発生します。

欲しいかもしれません

  • リモートシェルで変数を拡張する場合

    set new {"$Backend1Name"}
    
  • 期待されるスクリプトが変数を拡張したいが、値に二重引用符が必要な場合

    set new "\"$Backend1Name\""
    

名前の周りに文字通り二重引用符をYAMLファイルに表示するかどうか疑問に思います。

5強と6強を視聴してみてください。Tclチュートリアル

関連情報