pattern-matching - 在 Tcl 中具有名称模式的 tar 不起作用

标签 pattern-matching tcl exec

当我尝试在 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/

相关文章:

scala - 在 Scala 中匹配任意列表大小

linux - 如果匹配,则在文件中搜索字符串用某个字符串替换同一行中的另一个字符串

linux - 如何在 C 代码中从其中一个进程触发时重新启动一组进程

list - 如何从 Tcl 中的列表中获取值(value)?

c - 参数大小未知的 execl 与 execv

java - 无法使用php exec函数执行java程序

sql - 如何转义字符串以与 SQL Server 中的 LIKE 运算符一起使用?

regex - 将一系列日期中的 Grep 作为文件名

linux - Bash 脚本 : How do I rename files to remove numeric characters at the beginning?

bash - Expect Script - 修复奇怪的终端大小调整行为