아래 언급된 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 튜토리얼