Aliasing grep in der Option -exec von find

Sep 05 2020

Ich habe diese Aliase in meinem ~/.bashrc

alias grep='grep --color=auto -H'
alias fgrep='fgrep --color=auto -H'
alias egrep='egrep --color=auto -H'

Sie haben jedoch keine Auswirkung, wenn ich ausgeführt werde find ... -exec grep ..., und ich muss diese Optionen immer manuell bereitstellen.

Gibt es eine Möglichkeit, findsich in den -execArgumenten der Option auf Aliase zu verlassen ? Ich denke eher an Konfigurationsdateien als an andere Aliase.

Wäre es irgendwie unsicher?

Antworten

1 Noname Sep 05 2020 at 00:15

Sie können solche Aliase nicht verwenden. Aliase funktionieren nur, wenn sie zuerst in einer langen Befehlssequenz verwendet werden. Die Shell ersetzt im Grunde den Aliastext durch den eigentlichen Befehl. Wenn Sie einen Befehl eingeben, sucht die Shell zuerst nach einem Alias, dann nach einer Funktion und so weiter. Befehlssubstitution / Aliasersetzung funktioniert nicht, wenn Sie einen Alias ​​mitten in einer Befehlssequenz verwenden.

Darüber hinaus erzeugt das -execFlag von findimmer einen separaten Prozess, der die Binärdatei ausführt, weder einen Alias ​​noch eine Funktion, die fest codiert ist.

1 steeldriver Sep 05 2020 at 00:33

Einige Shells ermöglichen die Erweiterung von Aliasen an einer beliebigen Stelle in der Befehlszeile. Sie haben beispielsweise zshdas Konzept eines globalen Alias .alias -g 'grep=grep --color=auto -H'

Wenn Ihre interaktive Shell jedoch bash ist, werden Aliase nur erweitert, wenn sie als erstes Wort eines Befehls angezeigt werden. Sie müssten den grepAufruf daher in eine Shell einschließen und die Shell so aufrufen, dass Ihre ~/.bashrcDatei gelesen wird. wie in einer interaktiven Shell-Sitzung.

Beispielsweise

find . -name '*.txt' -exec bash -ic 'for f do grep foo "$f"; done' find-bash {} +

AFAIK ist in keiner Weise unsicher - es hat jedoch einen gewissen Overhead und ist kaum bequemer, als einfach die gewünschten Optionen für die direkte Grep bereitzustellen.