![셸에 포함된 예상 스크립트: 원격 셸에 정의된 값을 지정하는 방법은 무엇입니까?](https://linux55.com/image/163191/%EC%85%B8%EC%97%90%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EC%98%88%EC%83%81%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%3A%20%EC%9B%90%EA%B2%A9%20%EC%85%B8%EC%97%90%20%EC%A0%95%EC%9D%98%EB%90%9C%20%EA%B0%92%EC%9D%84%20%EC%A7%80%EC%A0%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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