Wie füge ich meine Argumente in einen Bash-Alias-Befehl ein?

3

ich habe normalerweise den folgenden einfachen alias in meiner bashrc:

alias g="grep --color=always --exclude-dir=\*.svn\*"

aber jetzt muss ich an systemen arbeiten, die nur GNU grep 2.5 haben, also nein --exclude-dir Streit.

jetzt brauche ich so etwas zum arbeiten

alias g="grep --color=always $1 $2 | grep -v .svn"

Die Argumente werden jedoch natürlich an das Ende des Alias ​​angehängt. $ 1 und $ 2 werden analysiert, wenn der Alias ​​nicht erstellt wird, auch nicht bei starken Anführungszeichen.

Kann ich das lösen, ohne auf zusätzliche Skripte oder Funktionen zurückgreifen zu müssen?

gcb
quelle

Antworten:

7

Nein, das kannst du nicht. Wie im Bash-Handbuch heißt es:

Es gibt keinen Mechanismus zur Verwendung von Argumenten im Ersetzungstext, wie in `csh '. Wenn Argumente benötigt werden, sollte eine Shell-Funktion verwendet werden (* note Shell Functions: :).

Funktionen sind dafür das Richtige und können so einfach geschrieben werden wie ein Alias. In diesem Fall könnte es sein

function g () { grep --color=always "$1" "$2" | grep -v .svn ; }
Alan Shutko
quelle
2
+1 Sicherer, um die Positionsparameter zu zitieren.
glenn jackman
Sehr richtig. Zur Korrektur korrigiert.
Alan Shutko