TCL:exec egrep“子进程异常退出”

时间:2012-04-29 12:34:48

标签: tcl

我的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,剥离*

2 个答案:

答案 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.