У меня есть следующий минимальный исходный файл:
$ 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
Но если я запускаю etags через find / xargs, тегифайл поврежден:
$ 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 Lucid.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
Новая информация :
Я только что заметил, что разница между этими двумя вариантами в моем первоначальном вопросе выше - это ведущий .
на пути.И если я вызываю etags как etags ./path/xx/yy/fooBar.c
, это повредит файл.Поэтому обходной путь - убедиться, что у аргументов etags нет ведущих тегов.(Возможно, это ошибка в etags, потому что документация описывает мой шаблон использования почти точно.)