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

2106
gcb

ich habe normalerweise den folgenden einfachen alias in meiner bashrc:

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

Nun muss ich aber an Systemen arbeiten, die nur GNU grep 2.5 haben, daher kein --exclude-dirArgument.

jetzt brauche ich so etwas zum arbeiten:

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

Natürlich werden die Argumente 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?

3

1 Antwort auf die Frage

7
Alan Shutko

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

Es gibt keinen Mechanismus für die 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 ; } 
+1 Sicherer, um die Positionsparameter zu zitieren. glenn jackman vor 11 Jahren 2
Sehr richtig. Zur Korrektur korrigiert. Alan Shutko vor 11 Jahren 0