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 튜토리얼

관련 정보