我正在编写一个Expect脚本,该脚本将远程访问服务器“ server2”并执行fileexists.sh,它将查找文件是否存在于特定位置。
Bash脚本-fileexists.sh如下:
#!/bin/bash
if [ -s $1 ]; then
echo "non empty file exists."
else
echo "File doesnot exist or is empty."
期望脚本-expec如下:
#!/usr/bin/expect
set username [lindex $argv 0]
set password [lindex $argv 1]
set hostname [lindex $argv 2]
set rfile [lindex $argv 3]
set prompt "$username* ~]$ "
spawn ssh -q -o StrictHostKeyChecking=no $username@$hostname
expect {
timeout {
puts "\n\nConnection timed out"
exit 1
}
"*assword:" {
send "$password\r"
}
}
expect {
"$prompt" {
puts "Logged in successfully.
}
}
spawn ./fileexists.sh $rfile
set lineterminationChar "\r"
expect {
$lineterminationChar { append output $expect_out(buffer);exp_continue}
eof { append output $expect_out(buffer)}
}
puts $output
当我使用./expec用户通过server2 /apps/bin/file.p调用Expect脚本时,输出为“文件不存在或为空”。尽管该文件位于server2上的位置。
我使用了期望进行了检查: 如果{[文件存在$ rfile]} {放置“文件存在”}
我得到的输出是“文件存在”。
似乎是我无法弄清的东西。
答案 0 :(得分:0)
要检查远程主机,请执行以下操作(我假设您正在登录到Linux计算机或具有GNU stat
的计算机):未经测试
send -- "stat -c '%s' '$rfile'\r"
expect {
-re {\r\n(\d+)\r\n} {
puts "$rfile exists with size $expect_out(1,string)"
}
-gl {*No such file or directory*} {
puts "$rfile does not exist"
}
}
send "exit\r"
expect eof