次の最小限のソース ファイルがあります。
$ cat path/xx/yy/fooBar.c
void this_is_a_test(void)
{
}
このように etags を実行すると、問題なく動作します。
$ etags path/xx/yy/fooBar.c
$ cat TAGS
path/xx/yy/fooBar.c,25
void this_is_a_test(1,0
しかし、find/xargs 経由で etags を実行すると、TAGS ファイルが破損します。
$ find . -name fooBar.c
./path/xx/yy/fooBar.c
$ find . -name fooBar.c | xargs etags
$ cat TAGS
path/xx/yy/fBoBar.c,25
void this_is_a_test(^?1,0
上記のファイル名が fBoBar.c として表示されていることに注意してください -- 偽物です!
のようなことで TAGS を生成できるのが好きfind . -name '*.[ch]' | xargs etags
です。しかし、これを行うと、ほとんどのファイル名が破損しています。
このように失敗する理由、および/またはそれを機能させるために私にできることはありますか?
Ubuntu ルシッド。Etags は emacs23-bin-common 23.1+1-4ubuntu7 からのものです。
編集:
fschmitt の質問への回答:
$ etags $(find . -name fooBar.c)
$ cat TAGS
path/xx/yy/fBoBar.c,25
void this_is_a_test(1,0
新しい情報:
上記の最初の質問での 2 つの用途の違いが.
、パスの先頭にあることに気付きました。のような etags を呼び出すとetags ./path/xx/yy/fooBar.c
、ファイルが破損します。したがって、回避策は、etags への引数に先行タグがないことを確認することです。(おそらく、これは etags のバグです。ドキュメントには私の使用パターンがほぼ正確に記述されているためです。)