![嵌入 shell 中的期望脚本:如何指定远程 shell 中定义的值?](https://linux22.com/image/163191/%E5%B5%8C%E5%85%A5%20shell%20%E4%B8%AD%E7%9A%84%E6%9C%9F%E6%9C%9B%E8%84%9A%E6%9C%AC%EF%BC%9A%E5%A6%82%E4%BD%95%E6%8C%87%E5%AE%9A%E8%BF%9C%E7%A8%8B%20shell%20%E4%B8%AD%E5%AE%9A%E4%B9%89%E7%9A%84%E5%80%BC%EF%BC%9F.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
被远程 shell 解释,你需要在两者中转义它expect
和在本地 shell 中,因为您使用不带引号的 EOF 来允许扩展本地 shell 变量$mypassword
所以尝试一下
send "echo \\\$tst\r"
这样,本地 shell 中的 here-doc 将输出\
和$
,并且expect
将看到\$tst
答案2
你不能tst
这样定义一个变量。看看这个问题。
命令是 TCL 脚本而不是 bash。尝试使用以下内容:
set tst "just a test string"
send "echo \$tst\r"
如果使用以下命令打印,您可以看到输出puts
puts $tst