加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

expect命令在bash脚本中不起作用

发布时间:2020-12-15 22:07:17 所属栏目:安全 来源:网络整理
导读:我有一个与期望相关的问题. 当我运行包含以下行的abc.sh时 #!/usr/bin/expectspawn scp /etc/httpd/conf/httpd.conf 192.168.0.12:/tmp######################expect {-re "password:" {exp_send "PASSWORDr"}}interact 它的工作正常 但是当我在运行的脚本
我有一个与期望相关的问题.

当我运行包含以下行的abc.sh时

#!/usr/bin/expect
spawn scp /etc/httpd/conf/httpd.conf 192.168.0.12:/tmp
######################
expect {
-re "password:" {
exp_send "PASSWORDr"
}
}
interact

它的工作正常

但是当我在运行的脚本中使用类似的代码时,它不起作用

#!/bin/bash
clear
while read -u3 LINE
do
code .........
code .......
code  ........

REMOTE_COMMANDS1="scp -r -v $BASE_DIRECTORY/$USERNAME $D_IPADDRESS:/home/"

spawn $REMOTE_COMMANDS1
######################
expect {
-re "password:" {
exp_send "redhatr"
}
}
interact


done 3< /opt/sitelist.txt

它给出了错误

./script.sh:line 62:意外令牌附近的语法错误}’
./script.sh:line 62:}’

我认为这是因为我没有在脚本的顶部包含#!/usr/bin/expect但是如果我使用它并执行我的脚本它不会做任何事情并且在执行后显示终端中的所有代码.那么我们可以同时包括#!/usr/bin/expect和#!/ bin / bash吗?

问候,
阿迪亚

解决方法

当然bash不能解释expect命令,就像bash不能解释Java / Perl / Python语法一样.有几种方法.

将expect脚本编写为单独的程序并从bash脚本调用它:

#!/bin/bash
clear
while read -u3 LINE
do
    #...
    ./expect_scp.exp "$BASE_DIR" "$D_IPADDRESS" "$USERNAME" "$PASSWORD"
done 3< /opt/sitelist.txt

和expect_scp.exp是

#!/usr/bin/expect

set base_dir  [lindex $argv 0]
set remote_ip [lindex $argv 1]
set username  [lindex $argv 2]
set password  [lindex $argv 3]
# or
foreach {base_dir remote_ip username password} $argv {break}

spawn scp -rv $base_dir/$username $remote_ip:/home/
expect -re "password:"
exp_send -- "$passwordr"
interact

您可以将expect脚本放在bash脚本中,并适当注意引用.幸运的是,单引号并不特别值得期待.

#!/bin/bash
clear
export BASE_DIR D_IPADDRESS USERNAME PASSWORD
while read -u3 LINE
do
    #...
    expect -c '
        spawn scp -rv $env(BASE_DIR)/$env(USERNAME) $env(D_IPADDRESS):/home/
        expect -re "password:"
        exp_send -- "$env(PASSWORD)r"
        interact
    '
done 3< /opt/sitelist.txt

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读