![期望脚本 - 未找到 bash 脚本文件](https://linux22.com/image/89622/%E6%9C%9F%E6%9C%9B%E8%84%9A%E6%9C%AC%20-%20%E6%9C%AA%E6%89%BE%E5%88%B0%20bash%20%E8%84%9A%E6%9C%AC%E6%96%87%E4%BB%B6.png)
我的期望脚本
#!/usr/bin/expect -f
#I tried replacing sh - with bash -s still no positive results
spawn ssh xxxx@yyyy "sh -" < test.sh
expect "password: "
send "zzzzz\r"
expect "$ "
如果在终端中执行该命令效果很好
ssh xxxx@yyyy "sh -" < test.sh
但是如果我通过expect
脚本执行它;它失败。
这是我通过期望脚本执行它的输出。我可以知道我错在哪里吗
bash: test.sh: No such file or directory
PS:是的,该文件存在并且凭据正确。
答案1
<
问题在于,当您单独运行 ssh 时(通过您输入的 shell),重定向是在本地完成的,但当您运行时是在远程计算机上完成的expect
,因为spawn
只是复制您提供的参数,因此<
作为 ssh 命令的一部分传递到远程。就像您'ssh' 'xxxx@yyyy' "sh -" '<' 'test.sh'
在 shell 中输入一样,这同样不起作用。
您需要添加一个中间 shell 命令以在 ssh 之前解析重定向。例如使用,
spawn sh -c "ssh xxxx@yyyy sh - < test.sh"