我有egrep命令的问题.当我在tcsh中执行我的命令时它工作正常但是当我从tcl脚本或tclsh执行它时,我得到:
子过程异常退出
我的tcl代码:
exec egrep -i "^(\\\s+)?(tvf::)?LAYOUT\\\s+PATH" test_file
Run Code Online (Sandbox Code Playgroud)
test_file包含
LAYOUT PATH "file1"
LAYOUT PATH "file2"
//LAYOUT FILE "file 3"
foo string
tvf::LAYOUT PATH "file4"
tvf::LAYOUT PATH "file5"
Run Code Online (Sandbox Code Playgroud)
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++
大家好,
我做了一些额外的调查,并在32位机器上运行此命令.该命令适用于32位egrep
结果:
LAYOUT PATH "file1"
LAYOUT PATH "file2"
tvf::LAYOUT PATH "file3"
tvf::LAYOUT PATH "file3"
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
命令返回错误:
子过程异常退出
64位机器上的egrep版本是:
file/bin/egrep */bin/egrep:指向`grep'的符号链接*
file/bin/grep */bin/grep:用于GNU/Linux 2.6.9的ELF 64位LSB可执行文件,AMD x86-64,版本1(SYSV),动态链接(使用共享库),用于GNU/Linux 2.6 .9,剥离*
grep使用其退出状态来指示是否存在匹配(手册页) - 如果不匹配则退出状态为1. Tcl exec
将任何非零退出状态视为异常情况.您需要catch
执行exec调用,检查catch的返回值以及非零检查$errorCode
变量.这里有一个完整的例子:http://wiki.tcl.tk/exec,单击"显示讨论"并向下滚动到KBK的示例.