且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何得到期望-c工作在单行而不是脚本

更新时间:2023-12-04 13:23:34

结果:
下面的代码将一个名为Sean_Lilly.zip的文件从我的框中移到另一个框无需输入密码:

  expect -cspawn / usr / bin / scp Sean_Lilly.zip adaptive@10.10.12.17: opt / ams / epf_3_4 / Sean_Lilly.zip;睡眠5; expect -re \password\;发送\ad\r\\\
\;设置超时-1; expect -re \100%\;

我知道这可以通过设置无密码ssh访问两个框之间,但我想在一个命令行使用expect。感谢模糊棒棒糖的灵感注意如果你运行expect -d -cspawn ...你得到很好的调试,发生了什么,包括你的正则表达式是否够好


I was wondering if anyone had any examples of how to use expect with -c.

Running:

my_machine~/opt/ams/data/ep/success$ expect -c "spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml; expect { '*password:*' { send 'ad'\r\n }}"

Does not seem to work as I am still asked for the password.

spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml
adaptive@10.10.12.17's password: 

If I run it as ascript it runs ok.

my_machine~/opt/ams/data/ep/success$ ./try.sh
spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml
adaptive@10.10.12.17's password:
xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml                                                                      100%   13MB  13.2MB/s   00:01
my_machine~/opt/ams/data/ep/success$ cat try.sh
#!/bin/bash
expect -c "
        spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml
        expect {
          "*password:*" { send "ad"\r\n; interact }
          eof { exit }
        }
        exit
        "

my_machine~/opt/ams/data/ep/success$

I would like to run this in a one line command rather than a script. Has anyone got any ideas?

Thanks in advance

A

I answered my own question below

Got it: The following code scps a file called Sean_Lilly.zip from my box to another box without entering a password:

expect -c "spawn /usr/bin/scp Sean_Lilly.zip adaptive@10.10.12.17:/opt/ams/epf_3_4/Sean_Lilly.zip; sleep 5; expect -re \"password\"; send \"ad\r\n\"; set timeout -1; expect -re \"100%\";"

I know this can be done by setting passwordless ssh access between the two boxes but I wanted to do it in one command line using expect. Thanks fuzzy lollipop for the inspiration. Note if you run expect -d -c "spawn ... you get excellent debug on what is happening including whether your regex is good enough