以下の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チュートリアル