2012-04-29 24 views
4

egrepコマンドに問題があります。TCL:exec egrep "子プロセスが異常終了しました"

子プロセスが異常

マイTCLコードを終了しました:私はtcshの中で、それは完璧に動作しているが、私はTCLスクリプトからまたはにtclshでそれを実行したときに、私が得た私のコ​​マンドを実行

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の */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でGNU/Linux 2.6.9用に動的にリンクされた(共有ライブラリを使用する)*

+0

バックスラッシュの多くは、あなたがそこに持っているもの私、... –

+0

こんにちはドナルを、32ビットマシン –

+1

置くのREのコマンドリターンエラー引用符を必要としないので、 '{'中括弧 '}'で数字を減らすことができます。 –

答えて

9

grepはマッチの有無を示すために終了ステータスを使用します(man page)終了ステータスは1です。Tclのexecは、例外ではない任意の終了ステータスを例外として扱います。 execコールをcatchにする必要があります。catchの戻り値をチェックし、0以外の場合は$errorCode変数を調べます。徹底的な例をここに示します:http://wiki.tcl.tk/exec、「ディスカッションを表示」をクリックし、KBKの例にスクロールします。

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. 
関連する問題