1.문제 설명:
원격 서버에 SSH를 연결하고 일부 스크립트를 실행하는 스크립트가 있습니다.
그런데 원격 서버에 정의된 값을 사용하려고 하면 약간의 문제가 발생합니다.
원격 서버에 정의된 값을 참조하기 위해 "\$"를 사용했는데 해당 값이 정의되지 않았다고 표시됩니다...
2. 오류 메시지:
3. 스크립트:
#!/bin/bash
myusrname="xxx"
myhost="xxx"
mypsword="xxx"
/usr/bin/expect<<-EOF
spawn ssh -o "StrictHostKeyChecking=no" $myusrname@$myhost
expect "*password*"
send "$mypsword\r"
expect "*#*"
send "tst=\"just a test string\"\r"
expect "*#*"
send "echo \$tst\r"
EOF
답변1
원격 셸에서 해석되도록 하려면 $tst
두 가지 모두에서 이스케이프해야 합니다.expect
그리고로컬 쉘에서는 로컬 쉘 변수의 확장을 허용하기 위해 따옴표 없이 EOF를 사용하기 때문입니다.$mypassword
그러니 시도해 보세요
send "echo \\\$tst\r"
이렇게 하면 로컬 셸의 here-doc가 \
및 를 출력하고 $
다음을 expect
볼 수 있습니다 .\$tst
답변2
tst
이 방법으로는 변수를 정의 할 수 없습니다 . 보세요이 문제.
명령은 bash가 아닌 TCL 스크립트입니다. 다음을 사용해 보세요:
set tst "just a test string"
send "echo \$tst\r"
다음 명령을 사용하여 인쇄하면 출력을 볼 수 있습니다.puts
puts $tst