Это не egrep, fgrep должен быть псевдонимом grep?

3

Поскольку egrep по сути является grep -E, я бы ожидал, что это псевдоним, который вызывает grep с этой опцией. Однако в моей системе

file `which egrep`

показывает, что это исполняемый файл. Также egrep как псевдоним вызывает только egrep с опцией цвета. Почему это не псевдоним? Компилируют ли они отдельный бинарный файл для egrep?

Просто любопытно...

Rohit Banga
источник

Ответы:

2

Это зависит от ОС и версии установленных инструментов grep.

Некоторые примеры систем, к которым у меня есть доступ:

  • Ubuntu 11.04, GNU grep 2.6.3: / bin / grep, / bin / fgrep и / bin / egrep - это три разных исполняемых файла разных размеров

  • GNU grep 2.10 (только что выпущенный несколько дней назад), собранный из исходного кода: то же самое.

  • Cygwin: то же самое.

  • CentOS 5.6 (клон Red Hat), GNU grep 2.5.1: / bin / egrep и / bin / fgrep являются символическими ссылками на / bin / grep.

  • GNU grep 2.5.1, собранный из исходного кода: egrep и fgrep - это небольшие сценарии оболочки, которые вызывают grep.

  • Solaris 9: три разных файла (инструменты Solaris, а не GNU).

Keith Thompson
источник
1

Раньше они были отдельными исполняемыми файлами, но в наши дни это обычно один исполняемый файл с тремя жесткими ссылками («grep», «fgrep» и «egrep»), указывающими на одну и ту же программу: программа проверяет, под каким именем она запускалась и ведет себя соответственно.

Так что вы работаете в расширенном egrep с включенными функциями двух других программ: и вызывая его под другим именем -E дает вам функции, которые вы ожидаете.

Если вы печатаете

ls -i `which grep`

и то же самое для fgrep а также задать расширенное вы можете видеть, что все они имеют один и тот же номер инода, а это означает, что они являются одним файлом.

njd
источник
Ну, по крайней мере, в моей системе у них разные номера инодов (отключено на 3). но в принципе я понимаю вашу точку зрения. это могут быть жесткие символические ссылки, и программа grep может найти argv [0], чтобы выяснить, какие опции применить.
Rohit Banga