用tcl执行shell命令

时间:2015-12-20 00:46:00

标签: shell grep tcl

我想通过tcl执行以下shell命令:

cat $file_path/file | grep test > $file_path/des_file

我使用exec但是我收到以下错误:

cat :|grep No such file or directory

如何使用tcl

使这个命令正常工作

1 个答案:

答案 0 :(得分:4)

我打赌你实际写这个:

cat $file_path/file |grep test > $file_path/des_file

|grep之间的空格。 Tcl的exec关心这一点,因为它在没有进入外壳的情况下组装管道,而且对这些事情更加挑剔。

其中一个替代方案,只适用于路径名中没有空格的地方:

# Or however you want to make the script, such as popping up a dialog box in a GUI
set shell_script "cat $file_path/file |grep test > $file_path/des_file"
exec sh -c $shell_script

虽然你可以在没有cat的情况下做到这一点:

exec grep test < $file_path/file > $file_path/des_file

那就是说,因为它是grep你可以在Tcl中完全

# Read in all the lines
set f [open $file_path/file]
set lines [split [read $f] \n]
close $f

# Filter the lines
set matches [lsearch -all -inline -glob $lines *test*]

# Write out the filtered lines
set f [open $file_path/des_file w]
puts $f [join $matches \n]
close $f

-regexp的{​​{1}}选项与lsearchgrep更接近匹配,但对于这种情况来说,它的速度较慢且过度。