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

TCL:exec egrep";子进程异常退出”;,tcl,Tcl,我对egrep命令有问题。 当我在tcsh中执行命令时,它工作正常,但当我从tcl脚本或tclsh中执行命令时,我得到: 子进程异常退出 我的tcl代码: exec egrep -i "^(\\\s+)?(tvf::)?LAYOUT\\\s+PATH" test_file 测试文件包含 LAYOUT PATH "file1" LAYOUT PATH "file2" //LAYOUT FILE "file 3" foo string tvf::LAYOUT PATH "file4" tv

我对egrep命令有问题。 当我在tcsh中执行命令时,它工作正常,但当我从tcl脚本或tclsh中执行命令时,我得到:

子进程异常退出

我的tcl代码:

exec egrep -i "^(\\\s+)?(tvf::)?LAYOUT\\\s+PATH" 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"
文件/bin/egrep */bin/egrep:指向“grep”的符号链接*

文件/bin/grep */bin/grep:ELF 32位LSB可执行文件,英特尔80386,版本1(SYSV),适用于GNU/Linux 2.2.5,动态链接(使用共享库),剥离*

但当我删除其他反斜杠时:

exec egrep -i "^(\s+)?(tvf::)?LAYOUT\s+PATH" test_file
命令返回错误:

子进程异常退出

64位计算机上的egrep版本为:

文件/bin/egrep */bin/egrep:指向“grep”的符号链接*

文件/bin/grep
*/bin/grep:ELF 64位LSB可执行文件,AMD x86-64,版本1(SYSV),对于GNU/Linux 2.6.9,动态链接(使用共享libs),对于GNU/Linux 2.6.9,stripped*

grep使用其退出状态指示是否存在匹配()-如果没有匹配,则退出状态为1。Tcl的
exec
将任何非零退出状态视为异常情况。您需要
catch
执行调用,检查catch的返回值,如果非零,则检查
$errorCode
变量。这里有一个完整的示例:,单击“显示讨论”并向下滚动到KBK的示例。

在运行以下命令时,我遇到了相同的错误:

exec top -b -n 1 -c | egrep lnx64.o/vsimk | wc -l
TCL对grep表达式中的正斜杠“/”不满意。 通过使用“-Ignoresterr”开关将其修复:


天啊,你有这么多反斜杠…你好,多纳尔,没有这些额外的反斜杠,32位机器上的命令返回错误在
{
大括号
}
中输入REs会让你减少数量,因为没有什么需要引用。而“32位机器”只是有史以来最大的麻烦。机器字和地址空间的大小与您的问题无关。
exec -ignorestderr -- top -b -n 1 -c | egrep lnx64.o/vsimk | wc -l.