39 Stimmen

Wie kann ich mit xargs Befehle verwenden?

Ich habe den folgenden Alias in meiner .aliases-Datei:

alias gi grep -i

und ich möchte nach foo in allen Dateien suchen, die den String bar im Namen haben, ohne auf die Groß- und Kleinschreibung zu achten:

find -name \*bar\* | xargs gi foo

Das ist was ich bekomme:

xargs: gi: Datei oder Verzeichnis nicht gefunden

Gibt es einen Weg, um Aliase in xargs zu nutzen, oder muss ich die Vollversion verwenden:

   find -name \*bar\* | xargs grep -i foo

Hinweis: Dies ist ein einfaches Beispiel. Neben gi habe ich einige ziemlich komplizierte Aliase, die ich nicht so einfach manuell erweitern kann.

Edit: Ich benutze tcsh, also bitte geben Sie an, ob eine Antwort shell-spezifisch ist.

1voto

Feniks Punkte 1

Die einfachste Lösung in Ihrem Fall wäre, Ihr Alias inline zu erweitern. Aber das gilt nur für csh/tcsh.

find -name \*bar\* | xargs `alias gi` foo

Für bash wird es komplizierter, nicht so praktisch, aber trotzdem nützlich sein:

find -name \*bar\* | xargs `alias gi | cut -d "'" -f2` foo

0voto

Ryan Oberoi Punkte 12977

Für tcsh (das keine Funktionen hat), könnten Sie Folgendes verwenden:

gi foo `find -name "*bar*"`

Für bash/ksh/sh können Sie eine Funktion in der Shell erstellen.

   function foobar 
   {
      gi $1 `find . -type f -name "*"$2"*"`
   }

   foobar foo bar

Denken Sie daran, dass die Verwendung von Backticks in der Shell aus mehreren Perspektiven vorteilhafter ist als die Verwendung von xargs. Platzieren Sie die Funktion in Ihrer .bashrc.

0voto

tilo Punkte 1

Mit Bash können Sie auch die Anzahl der Argumente angeben, die Ihrem Alias (oder Funktion) übergeben werden, wie folgt:

alias myFuncOrAlias='echo'  # Alias definiert in Ihrer ~/.bashrc, ~/.profile, ...
echo arg1 arg2 | xargs -n 1 bash -cil 'myFuncOrAlias "$1"' arg0

(sollte auch für tcsh ähnlich funktionieren)

# Alias-Definition in ~/.tcshrc
echo arg1 arg2 | xargs -n 1 tcsh -cim 'myFuncOrAlias "$1"' arg0  # nicht getestet

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X