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:意外令牌附近的语法错误}’ 我认为这是因为我没有在脚本的顶部包含#!/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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |