2012-04-29 140 views
4

我有egrep命令的問題。 當我在tcsh中執行我的命令,這是工作完美,但是當我從TCL腳本或tclsh的執行它,我得到:TCL:exec egrep「子進程異常退出」

子進程異常退出

我的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" 

文件/ bin中/ egrep的 * /斌/ 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的版本是:

file/bin/egrep */bin中/ egrep的:符號鏈接`grep的'*

文件/斌/ grep的 * /斌/ grep的:ELF 64位LSB的可執行文件,AMD X86-64,版本1(SYSV),對於GNU/Linux 2.6.9,動態鏈接(使用共享庫),用於GNU/Linux 2.6.9,剝離*

+0

我,正是很多反斜線你到了那裏... – 2012-04-29 21:38:08

+0

你好多納爾,如果沒有這些額外的反斜槓在32位機器 – 2012-04-30 06:49:29

+1

把RE的命令返回錯誤在'{'大括號''''會讓你減少數量,因爲什麼都不需要引用。 – 2012-04-30 13:55:46

回答

9

grep使用其退出狀態指示存在/不存在匹配(man page) - 如果不匹配退出狀態爲1.Tcl的exec將任何非零退出狀態視爲異常情況。您需要執行調用catch,檢查catch的返回值,如果非零則檢查$errorCode變量。一個完整的例子:http://wiki.tcl.tk/exec,點擊「顯示討論」並向下滾動到KBK的例子。

exec top -b -n 1 -c | egrep lnx64.o/vsimk | wc -l 

TCL對此很不開心斜槓「/」在grep的表達:

0

我運行下面的命令時,有同樣的錯誤。 它得到了固定,通過使用「-ignorestderr」開關:

exec -ignorestderr -- top -b -n 1 -c | egrep lnx64.o/vsimk | wc -l.