
Ich habe zwei Aliase watchExpand
und l
. Ich weiß, dass Sie die Bash-Erweiterung mit Aliasen zum Laufen bringen können, indem Sie am Ende ein Leerzeichen einfügen, wie folgt:
alias watchExpand='watch '
l
ist ein Alias für ls -larthiF --context
. Wenn ich den Befehl also eingebe, watchExpand l
funktioniert er einwandfrei.
Wenn ich jedoch einen Parameter für watchExpand
den Befehl angebe, z. B.
watchExpand -n 1 l
Mein l
Alias funktioniert nicht mehr. Wie kann ich eine Bash-Erweiterung nach Argumenten erhalten?
Antwort1
Hier ist die schlechte Idee, die ichdenkenSie fragen nach:
function watchExpand() {
e=""
for param in $@
do
if alias $param >/dev/null 2>&1
then
exp=$(alias $param | cut -d= -f2| sed -e s/^\'// -e s/\'\$//)
e+=" $exp"
else
e+=" $param"
fi
done
watch $e
}
Antwort2
Zsh hat globale Aliase. Sie könnten Folgendes tun:
alias -g @l='ls -larthiF --context'
und dann:
watch -n 1 @l
Beachten Sie, dass dies @
nicht zwingend erforderlich ist, ich verwende es jedoch, um zu vermeiden, dass die globalen Aliase unbeabsichtigt aufgerufen werden.
Antwort3
Ich finde die Lösung auf meine Art.
Zuerst erstelle ich eine Funktion namens „addExpand“, um Alias/Funktionen einfacher hinzuzufügen, wenn ich möchte.
xb@dnxb:/tmp/t$ type -a addExpand
addExpand is a function
addExpand ()
{
echo -e "#!/bin/bash\nshopt -s expand_aliases\n. ~/.bash_aliases 2>/dev/null\n$1"' "$@"' | sudo tee /usr/bin/e_"$1";
sudo chmod +x /usr/bin/e_"$1"
}
xb@dnxb:/tmp/t$ addExpand l
#!/bin/bash
shopt -s expand_aliases
. ~/.bash_aliases 2>/dev/null
l "$@"
Nachdem ich ausgeführt habe addExpand l
, wird Alias l
als ausführbare Datei mit dem Namen erstellt/usr/bin/e_lmit folgendem Inhalt:
xb@dnxb:/tmp/t$ cat /usr/bin/e_l
#!/bin/bash
shopt -s expand_aliases
. ~/.bash_aliases 2>/dev/null
l "$@"
Nun können Sie die erweiterte Version des Alias/der Funktion nutzen:
xb@dnxb:/tmp/t$ watch --color -n 1 e_l /tmp //works like a charm !!!
xb@dnxb:/tmp/t$
Notiz:
[1] e_l
, Präfix „e_“, um anzugeben, dass es sich um die erweiterte Version des Befehls handelt.
[2] Ich finde es zu aufwändig, alle Sekunden eine Sourcing-Operation durchzuführen, wenn ich mit arbeite watch -n 1
. Ich muss vielleicht einen Weg finden, dieses Problem zu lösen.
[3] Ein weiterer Nachteil ist, dass Aliase nicht rekursiv aufgelöst werden.