嵌入 shell 中的期望脚本:如何指定远程 shell 中定义的值?

嵌入 shell 中的期望脚本:如何指定远程 shell 中定义的值?

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

相关内容