当我尝试在 tcl 中运行此命令时:
tar -zcvf input.scs__pmos.sdevv.tar.gz input.scs*
我收到这条消息:
/bin/tar: input.scs*: Cannot stat: No such file or directory
/bin/tar: Error exit delayed from previous errors
child process exited abnormally
while executing
但是,当我在 Perl/shell 中运行时,我得到:
perl -e 'system("tar -zcvf input.scs__pmos.sdevv.tar.gz input.scs*")'
我得到:
input.scs
input.scs~
为什么 Tcl 会造成这种情况?从 LINUX Shell 运行会产生相同的结果。 我使用 Tcl 8.5
最佳答案
默认情况下,Tcl 不 扩展文件名 glob(*
)。这是设计使然。如果你想扩展它,你必须明确地要求它(记住扩展会产生一个文件名的列表,所以我们需要 {*}[…]
而不仅仅是 […]
):
exec tar -zcvf input.scs__pmos.sdevv.tar.gz {*}[glob input.scs*]
总是添加exec
是一种很好的风格;只有在交互模式下你才能完全忽略它,这只是一个方便的功能。您的脚本需要它,因此请立即养成良好的习惯。
关于pattern-matching - 在 Tcl 中具有名称模式的 tar 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34066705/