期望脚本中的通配符不起作用

时间:2012-06-18 23:54:10

标签: testing expect

我有以下脚本成功运行。但是,如果我尝试使用通配符,要复制多个文件,它会抛出一个错误,说“没有这样的文件或目录”。

此代码有效:

#!/usr/bin/expect -f
spawn scp file1.txt root@192.168.1.156:/temp1/.
expect "password:"
send "iamroot\r"
expect "*\r"
expect "\r"

以下不起作用:

#!/usr/bin/expect -f
spawn scp * root@192.168.1.156:/temp/. #fails here
….

2 个答案:

答案 0 :(得分:3)

*通常由shell(bash)扩展,但在这种情况下,shell为expect。我怀疑expect没有扩展*

尝试:

spawn bash -c 'scp * root@192.168.1.156:/temp/.'

说明:

#!/usr/bin/expect -f
spawn echo *
expect "*"

spawn bash -c 'echo *'
expect "file1 file2…"

答案 1 :(得分:-1)

AFAIK scp默认为文件副本,而bash可能会扩展*到目录,如果在当前路径中找到任何目录。

也许尝试-r(递归)可以解决您的问题(不确定,因为我现在无法测试场景)?

或者,如果您不想复制整个文件夹结构,可以根据需要使用scp *.txt ...