Псевдоним grep в параметре find -exec
У меня есть эти псевдонимы в моем ~/.bashrc
alias grep='grep --color=auto -H'
alias fgrep='fgrep --color=auto -H'
alias egrep='egrep --color=auto -H'
но они не действуют, когда я бегу find ... -exec grep ..., и мне всегда приходится вводить эти параметры вручную.
Есть ли способ указать findполагаться на псевдонимы в -execаргументах параметра? Я думаю о файлах конфигурации, а не о других псевдонимах.
Было бы это в чем-то небезопасно?
Ответы
Вы не можете использовать такие псевдонимы. Псевдонимы работают, только если они используются первыми в длинной последовательности команд, оболочка в основном заменяет текст псевдонима фактической командой. Когда вы вводите команду, оболочка сначала ищет псевдоним, затем функцию и так далее. Подстановка команд / подстановка псевдонима не работает, если вы используете псевдоним в середине последовательности команд.
Кроме того, -execфлаг find, всегда будет порождать отдельный процесс, выполняющий двоичный файл, ни псевдоним, ни функцию, которые жестко запрограммированы.
Некоторые оболочки позволяют расширять псевдонимы в любом месте командной строки - например, zshимеют концепцию глобального псевдонима ,alias -g 'grep=grep --color=auto -H'
Однако если ваша интерактивная оболочка - bash, псевдонимы раскрываются только тогда, когда они появляются в качестве первого слова команды, поэтому вам нужно будет обернуть grepвызов в оболочку и вызвать оболочку таким образом, чтобы ваш ~/.bashrcфайл был прочитан, как будто в интерактивном сеансе оболочки.
Например
find . -name '*.txt' -exec bash -ic 'for f do grep foo "$f"; done' find-bash {} +
AFAIK это ни в коем случае не небезопасно - однако это имеет некоторые накладные расходы и вряд ли удобнее, чем просто предоставить желаемые параметры для grep напрямую.