【发布时间】:2014-12-25 21:20:04
【问题描述】:
我正在编写一个期望脚本来确定远程服务器上是否存在特定文件。我的测试服务器与远程服务器位于同一网络中。当我尝试通过 stackoverflow 搜索类似的东西时,我所能找到的只是期望可以在本地服务器上运行的脚本。
此链接 (How to find if a file exists in expect script) 是最近的。
在类似的行中,我发现以下网站 - Expect with SFTP
期待脚本
基于这两个我尝试编写我的期望脚本 -
#! /usr/bin/expect
set fileName [lindex $argv 0]
set hostIp "10.0.0.1"
puts "SSH to server"
spawn sftp local@$hostIp
sleep 2
expect "Password:"
sleep 2
exp_send "local123\r"
sleep 2
expect "sftp> "
sleep 2
set prompt "sftp> "
exp_send "ls $fileName\r"
sleep 2
expect {
"$fileName" { send_user "\n Found \n" }
"sftp>" { send_user "\n Not Found \n" }
}
无论对“ls $fileName”的响应如何,我都会得到输出为“Found”。期望部分的逻辑是 -
找到逻辑
spawn sftp local@10.0.0.1
Connecting to 10.0.0.1...
CentOS release 6.2 (Final)
Kernel 2.6.32-279.14.1.el6.x86_64 on an x86_64
Password:
sftp> ls file1.txt
file1.txt
找不到逻辑
spawn sftp local@10.0.0.1
Connecting to 10.0.0.1...
CentOS release 6.2 (Final)
Kernel 2.6.32-279.14.1.el6.x86_64 on an x86_64
sftp> ls file2.txt
Couldn't stat remote file: No such file or directory
Can't ls: "/file2.txt" not found
sftp>
所以在这两种情况下,脚本输出都是“FOUND”,这是我不明白逻辑的地方。如果文件存在,我希望文件名会弹出。否则,我希望看到消息“无法说明......”。
问题
可以期望检测到提示吗?我可以把它存放在某个地方吗?
有没有更好的方法来查找远程服务器上是否存在文件?
我的脚本有问题吗?
提前感谢您的帮助!
【问题讨论】:
-
$fileName 存在于找到和未找到的响应中。
-
@BradLanam - 如果找到文件,则输出“ls $fileName”,然后就是文件名本身。就像在发现的逻辑中一样。如果找不到文件,那么它将打印以下内容 - 无法统计远程文件:没有这样的文件或目录 无法 ls: "/file2.txt" 未找到 sftp>