Wandeln Sie stattdessen "gi" in ein Skript um
zB in /home/$USER/bin/gi
:
#!/bin/sh
exec /bin/grep -i "[email protected]"
Vergessen Sie nicht, die Datei als ausführbar zu markieren.
Der Vorschlag hier ist, xargs zu vermeiden und anstelle von xargs eine "while read"-Schleife zu verwenden:
find -name \*bar\* | while read file; do gi foo "$file"; done
Siehe die akzeptierte Antwort im obigen Link für Verfeinerungen zum Umgang mit Leerzeichen oder Zeilenumbrüchen in Dateinamen.
Aliase sind Shell-spezifisch - in diesem Fall höchstwahrscheinlich Bash-spezifisch. Um einen Alias auszuführen, müssen Sie bash ausführen, aber Aliase werden nur für interaktive Shells geladen (genauer gesagt .bashrc
wird nur für eine interaktive Shell gelesen).
bash -i führt eine interaktive Shell aus (und erzeugt .bashrc).bash -c cmd führt cmd aus .
Setzen Sie sie zusammen:bash -ic cmd führt cmd aus in einer interaktiven Shell, wo cmd kann eine in Ihrem .bashrc
definierte Bash-Funktion/ein Alias sein .
find -name \*bar\* | xargs bash -ic gi foo
sollte tun, was du willst.
Bearbeiten:Ich sehe, Sie haben die Frage als "tcsh" markiert, daher ist die bash-spezifische Lösung nicht anwendbar. Mit tcsh brauchen Sie die -i
nicht , da es .tcshrc zu lesen scheint, es sei denn, Sie geben -f
ein .
Versuchen Sie Folgendes:
find -name \*bar\* | xargs tcsh -c gi foo
Es funktionierte für meine grundlegenden Tests.