3

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

file `which egrep`

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

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

2 ответа2

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).

1

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

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

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

ls -i `which grep`

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .