4

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"

ファイル /bin/egrep */bin/egrep: 「grep」へのシンボリック リンク*

ファイル /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 バージョンは次のとおりです。

ファイル /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、ストリップ*

4

2 に答える 2

11

grep は終了ステータスを使用して、一致の有無を示します ( man ページ)。一致しない場合、終了ステータスは 1 です。Tclexecは、ゼロ以外の終了ステータスを例外的な状況として扱います。exec 呼び出しが必要でcatch、catch からの戻り値を確認し、ゼロ以外の場合は$errorCode変数を調べます。ここに完全な例があります: http://wiki.tcl.tk/exec、「ディスカッションを表示」をクリックして、KBK の例まで下にスクロールします。

于 2012-04-29T16:54:23.470 に答える