让远程shell评估表达式内部期望ssh脚本

时间:2016-03-03 15:19:28

标签: bash shell ssh expect

我必须使用 expect ssh 来自动执行远程shell(在我的特定情况下,本地和远程 bash shell)。也就是说,我需要将ssh someuser@example.com "echo This is \$(hostname)"包装在expect脚本中。

运行上面的“手动”脚本,我得到了预期的输出:This is example.com,因此在远程机器上评估$(hostname)表达式(命令替换)。 / p>

现在我将ssh-remote-shell命令包含在expect 此处文档中:

#/bin/bash

expect <<- DONE
  spawn ssh someuser@example.com "echo This is \\$(hostname)"
DONE

包装的脚本返回[...] This is localhost。因此,$(hostname)表达式在我的本地计算机上进行评估,而不是在远程计算机上进行评估。

我尝试过不同级别的反斜杠转义,单引号和双引号<<- DONE<< DONE,并将$(hostname)移动到自己的 expect 变量(即set someCommand "\\$hostname",然后引用$someCommand)。但没有任何帮助。

如何让远程shell在SSH expect 脚本中评估shell表达式?

1 个答案:

答案 0 :(得分:2)

你快到了。

SO

输出

#!/bin/bash
expect <<- DONE
 set timeout 120
 spawn ssh dinesh@remote-lab "echo This is \\\$(hostname)"
 expect {
         "password: $" {send "welcome\r";exp_continue}
         eof
 }
DONE

注意: dinesh@myPC:~/stackoverflow$ ./abdull spawn ssh dinesh@remote-lab echo This is $(hostname) dinesh@remote-lab's password: This is remote-lab 语句也可以写为

spawn