Normalerweise habe ich in meiner Bashrc den folgenden einfachen Alias:
alias g="grep --color=always --exclude-dir=\*.svn\*"
aber jetzt muss ich auf Systemen arbeiten, die nur GNU grep 2.5 haben, daher kein --exclude-dir
Argument.
jetzt brauche ich so etwas zum Arbeiten:
alias g="grep --color=always $1 $2 | grep -v .svn"
aber natürlich werden die Argumente an das Ende des Alias angehängt. $1 und $2 werden analysiert, wenn der Alias erstellt wird, nicht wenn er aufgerufen wird, auch nicht bei starken Anführungszeichen.
Kann ich das lösen, ohne auf zusätzliche Skripte oder Funktionen zurückzugreifen?
Antwort1
Nein, das geht nicht. 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 (*beachten Sie Shell Functions::).
Funktionen sind hierfü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 ; }