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