2017-07-17 46 views
0

有人可以告诉我为什么这不起作用吗?如何使用bash脚本里面的期望

#!/bin/bash 
cd /home 
touch somefile 
/usr/bin/expect<<FILETRANSFER 
spawn scp -r -P remoteServerPort somefile remoteServerIP:/home 
expect "assword:" 
send "MyPassWord\r" 
interact 
FILETRANSFER 
echo "It's done" 

它没有给出任何错误,但文件没有传输到远程服务器。我尝试了很多方法仍然找不到任何解决方案。

+0

更好的方法是避免使用'ssh'(也是'scp')键入或发送任何密码。阅读一些ssh教程并使用公钥。 –

+0

'/ usr/bin/expect << FILETRANSFER',在这里你缺少'<<' – Jahid

+0

之前的空格谢谢你的回复。 @ Basile Starynkevitch由于某些原因,我无法使用公钥。 @ Jahid增加了空间,但仍然无法使用。 – derp

回答

1

您定义的bash脚本在标准输入expect上传递expect命令。但是,expect命令需要使用-c选项的文件参数或参数。

您有几个选择,但要在您的脚本上添加较少的修改,您只需使用流程替换为expect命令创建here-document(临时)即可。

#!/bin/bash 

    echo "[DEBUG] INIT BASH" 

    cd /home 
    touch somefile 

    /usr/bin/expect <(cat << EOF 
spawn scp -r -P remoteServerPort somefile remoteServerIP:/home 
expect "Password:" 
send "MyPassWord\r" 
interact 
EOF 
) 

    echo "[DEBUG] END BASH" 
+0

顺便说一句,我刚刚检查,并有一个所有可用的选项在这里回答:https://stackoverflow.com/questions/41165719/embedding-an-expect-inside-a-bash-script –

+0

不,期望是完全正确地读取标准输入中的命令,如问题中发布的那样。 –