我想通过tcl执行以下shell命令:
cat $file_path/file | grep test > $file_path/des_file
我使用exec但是我收到以下错误:
cat :|grep No such file or directory
如何使用tcl
使这个命令正常工作答案 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}}选项与lsearch
比grep
更接近匹配,但对于这种情况来说,它的速度较慢且过度。