文件夹中的文件列表:
$ 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
期望脚本使用固定名称和所有其他带有前缀" file"的文件来tar。 :
$ cat 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%)
如何使脚本能够正常运行。我需要做出哪些更改才能进行此更改?
答案 0 :(得分:1)
如果使用shell输入命令,shell本身会将file*
扩展为与此模式匹配的所有文件的列表。
运行期望的Tcl不知道您的给定文本是否是要扩展的模式。如果您希望tcl扩展您的模式,请使用tcl glob
命令。
set files [ glob file*]
puts $files