셸에 포함된 예상 스크립트: 원격 셸에 정의된 값을 지정하는 방법은 무엇입니까?

셸에 포함된 예상 스크립트: 원격 셸에 정의된 값을 지정하는 방법은 무엇입니까?

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

관련 정보