我的egrep命令有问题。 当我在tcsh中执行我的命令时它工作正常但是当我从tcl脚本或tclsh执行它时,我得到了:
子进程异常退出
我的tcl代码:
exec egrep -i "^(\\\s+)?(tvf::)?LAYOUT\\\s+PATH" test_file
test_file包含
LAYOUT PATH "file1"
LAYOUT PATH "file2"
//LAYOUT FILE "file 3"
foo string
tvf::LAYOUT PATH "file4"
tvf::LAYOUT PATH "file5"
+++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++
大家好,
我做了一些额外的调查,并在32位机器上运行此命令。 该命令适用于32位egrep
结果:
LAYOUT PATH "file1"
LAYOUT PATH "file2"
tvf::LAYOUT PATH "file3"
tvf::LAYOUT PATH "file3"
file / bin / egrep * / bin / egrep:指向`grep'*
的符号链接file / bin / grep * / bin / grep:ELF 32位LSB可执行文件,Intel 80386,版本1(SYSV),用于GNU / Linux 2.2.5,动态链接(使用共享库),剥离*
但是当我删除其他反斜杠时:
exec egrep -i "^(\s+)?(tvf::)?LAYOUT\s+PATH" test_file
命令返回错误:
子进程异常退出
64位机器上的egrep版本是:
file / bin / egrep * / bin / egrep:指向`grep'*
的符号链接file / bin / grep * / bin / grep:ELF 64位LSB可执行文件,AMD x86-64,版本1(SYSV),用于GNU / Linux 2.6.9,动态链接(使用共享库),用于GNU / Linux 2.6.9,剥离*
答案 0 :(得分:9)
grep使用其退出状态来指示是否存在匹配(man page) - 如果不匹配则退出状态为1. Tcl的exec
将任何非零退出状态视为异常情况。你需要catch
exec调用,检查catch的返回值,如果非零则检查$errorCode
变量。这里有一个完整的示例:http://wiki.tcl.tk/exec,单击“显示讨论”并向下滚动到KBK的示例。
答案 1 :(得分:0)
运行以下命令时出现同样的错误:
exec top -b -n 1 -c | egrep lnx64.o/vsimk | wc -l
TCL对grep表达式中的正斜杠“/”不满意。 它通过使用“-ignorestderr”开关得到修复:
exec -ignorestderr -- top -b -n 1 -c | egrep lnx64.o/vsimk | wc -l.