Linux系统:使用expect脚本
该文件夹中的文件清单邮编全部用相同后缀的文件:Linux系统:使用expect脚本
$ LL * TXT
-rw-rw-rw- 1 psawant CVS_GROUP 32 Mar 25 13:34 File.txt
-rw-rw-rw- 1 psawant CVS_GROUP 51 Mar 25 13:34 File_Changes.txt
-rw-rw-rw- 1 psawant CVS_GROUP 29 Mar 25 13:35 file1.txt
-rw-rw-rw- 1 psawant CVS_GROUP 29 Mar 25 13:35 file2.txt
-rw-rw-rw- 1 psawant CVS_GROUP 29 Mar 25 13:35 file3.txt
Expect脚本焦油具有固定名称的文件和所有其他文件前缀 “文件”:
$猫tar.exp
#!/usr/bin/expect -f
set timeout -1
match_max 100000
set PWD "12345"
set FILE1 "File.txt"
set FILE2 "File_Changes.txt"
spawn zip -e -j ZIP.zip $FILE1 $FILE2 file*
expect "Enter password:"
sleep 1
send -- "$PWD\r"
sleep 1
expect "Verify password:"
sleep 1
send -- "$PWD\r"
sleep 3
interact
当我从脚本运行它时,它将文件*视为文件名,但是当我使用相同的spawn命令并直接运行它时,它可以工作。
$ tar.exp
spawn zip -e -j ZIP.zip File.txt File_Changes.txt file*
Enter password:
Verify password:
zip warning: name not matched: file*
updating: File.txt (deflated 16%)
updating: File_Changes.txt (deflated 35%)
$ zip -e -j ZIP.zip File.txt File_Changes.txt file*
Enter password:
Verify password:
updating: File.txt (deflated 16%)
updating: File_Changes.txt (deflated 35%)
adding: file1.txt (deflated 24%)
adding: file2.txt (deflated 24%)
adding: file3.txt (deflated 24%)
怎样才能使它从script.What变化,我需要做才能使它这种变化工作?
如果使用shell输入命令,shell本身会将file*
扩展为与此模式匹配的所有文件的列表。
Tcl运行expect不知道如果你给定的文本是一个模式扩展与否。如果您希望tcl扩展您的模式,请使用tcl glob
命令。
set files [ glob file*]
puts $files
可能要添加'-nocomplain'选项。文档:http://tcl.tk/man/tcl8.6/TclCmd/glob.htm – 2015-03-25 13:10:18
@Prasad,使用'glob'是正确的方法。另一种方法是强制shell扩展通配符:'spawn sh -c {zip -e -j ZIP.zip File.txt File_Changes.txt文件*}'' – 2015-03-25 13:11:54
什么不使用while循环并迭代文件? – Ajit 2015-03-25 06:50:33
由于文件不一定与连续编号。它可以是任何东西 - file2567.txt或file31456.txt – 2015-03-25 06:55:02
Ohk。似乎不支持通配符。尝试在脚本中使用set + f来启用通配符。 – Ajit 2015-03-25 07:13:51