代码之家  ›  专栏  ›  技术社区  ›  amadain

如何让expect-c在单行而不是脚本中工作

  •  12
  • amadain  · 技术社区  · 14 年前

    跑步:

    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 }}"
    

    似乎不工作,因为我仍然要求密码。

    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: 
    

    如果我按ascript运行,它运行正常。

    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$
    

    我想在一行命令而不是脚本中运行它。有人有什么想法吗?

    A

    我回答了下面我自己的问题

    2 回复  |  直到 7 年前
        1
  •  14
  •   amadain    14 年前

    知道了: 以下代码将一个名为Sean\u Lilly.zip的文件从“我的盒子”复制到另一个盒子,而无需输入密码:

    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%\";"
    

    我知道这可以通过在两个框之间设置无密码ssh访问来实现,但是我想使用expect在一个命令行中实现。谢谢你的灵感。注意如果你运行expect-d-c“spawn。。。对于正在发生的事情,包括正则表达式是否足够好,您可以进行出色的调试

        2
  •  3
  •   user177800 user177800    14 年前

    你错过了一个 ;

    请尝试以下操作:

    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 -re \".*password.*\"; send 'ad\r\n';"