• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[geklärt] Alias mit Freizeichen

Guten Tag!

Ich will mir ein Alias für zypper anlegen, da ich beim 'zypper dup' laufend den 'verbose'-Schalter vergesse, aber ein Alias mit einem Freizeichen scheint nicht möglich zu sein; im Netz bzw. den manpages finde ich nichts dazu, und meine Versuche, das mit escapes, "" oder dergleichen umzusetzen, hauen alle daneben:

Code:
02:09 hoppers:~ # alias zypper dup='zypper -v dup'
bash: alias: zypper: not found
02:09 hoppers:~ # alias 'zypper dup'='zypper -v dup'
bash: alias: `zypper dup': invalid alias name
02:09 hoppers:~ # alias "zypper dup"='zypper -v dup'
bash: alias: `zypper dup': invalid alias name
02:09 hoppers:~ # alias zypper\ dup='zypper -v dup'
bash: alias: zypper: not found

Als einziger workaround funktioniert bislang das hier:

Code:
alias zypperdup='zypper -v dup'

...aber ich hätte das gerne mit einem Freizeichen. Weiß jemand, wie es doch funktionieren könnte?
 
zypper not found, deutet darauf hin das zypper selbst nicht gefunden wird. Versuche es doch mal mit absoluten Pfadangaben /usr/bin/zypper (oder wo auch immer zypper liegt).
 
Kein schlechter Gedanke, mich hat das 'not found' auch schon zum Grübeln gebracht, allerdings bezieht sich das wohl auf das Alias, nicht auf den auszuführenden Befehl:

Code:
08:05 hoppers:~ # alias zapper dup='zypper -v dup'
bash: alias: zapper: not found

...zumal 'zypperdup' ja wunderbar funktioniert, auch ohne absoluten Pfad.
 
http://www.linux-user.de/ausgabe/2000/12/086-bash/bash-jobs.html
Die Bash kennt nur Alias-Definitionen ohne Parameter (Argumente).

Damit dürfte dein Vorhaben in der Form nicht klappen und dein zypperdub wird nicht der schlechteste Weg sein dein Problem zu lösen.
 
Du hast völlig Recht: 'alias' setzt *ein* Befehl an Stelle einer Befehlskette, und gedacht ist es, um die Arbeit auf der bash zu erleichtern. Und ich versuche, diesem einen Befehl ein (Pseudo-)Argument anzuhängen - das ist schon ein wenig widersinnig, und diese "Lücke" in 'alias' ist letzlich einfach nur die konsequente Umsetzung des eigentlichen Konzepts.

Ich bin halt von meinen Gewohnheiten ausgegangen, und die sind auf 'zypper dup' geeicht. 'zypperdup' schleift sich bestimmt auch noch ein, eventuell mache ich es richtig konsequent und nenne das Ganze einfach 'dup'. Was man da an Zeit spart...
 
A

Anonymous

Gast
Ich hab gerade kein Linux hier aber ich glaube da geht auch ne kleine Krücke

Code:
alias zypper="zypper "  dup="-v dup"

robi
 
Ich sitze auch gerade an was anderem (grm...), aber ich probiere das nachher mal aus. Zwei Alisasse hintereinander könnte klappen. Wäre zumindest interessant.
 
A

Anonymous

Gast
gropiuskalle schrieb:
Zwei Alisasse hintereinander könnte klappen. Wäre zumindest interessant.
Das sind nicht zwei Aliase hintereinander sondern einfach nur 2 Aliase in einer Zeile konfiguriert.

Der Trick den ich damit versuchen wollte:

normalerweise wird nur das erst Wort durch einen Alias ersetzt
man müsste also
Code:
alias zypper="zypper -v"
machen.
Nur wenn das eben etwas unpraktisch ist, weil man dabei dann eben immer die Option -v an jedes zypper hintenran konfiguriert, auch wenn man das nicht haben will.

Also müsste das zweite Wort der eigentlichen Alias werden.
Code:
alias dup="-v dup"
das würde vor jedes dup ein -v setzten.
Aber: Da dup das 2. Wort ist, wird es normalerweise nicht ausgewertet.

Außer:
Manpage schrieb:
If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.
und das fuhrt zu der Idee
Zypper zu "Zypper " zu expandieren, um dadurch anschließend noch einen 2. Alias auswerten zu können.

Das ganze funktioniert dann solange dup nicht als eigenes Kommando benuzt wird, das dann damit auch als erstes Wort in der Befehlszeile stehen kann.

Aber wie gesagt es ist eine absolute Krückenlösung, sowas macht man normalerweise nicht.


robi
 
Code:
> cat alsfunction
zypper()
{
if [ $# -lt 1 ]
then
        echo give me arguments....
        return
fi
case $1 in
dup)
        /usr/bin/zypper -v $@
        ;;
*)
        /usr/bin/zypper $@
esac
}
Wie wäre es damit:
Code:
> . alsfunction
>zypper
give me arguments....

Die Funktion oben hab ich nicht tiefer getestet. Alternativ packe ich immer in mein lokales ~/bin/ ein gleichnamige Funktion.
In dieser Funktion ~/bin/zypper könnte man dann /usr/bin/zypper mit den neuen Parametern aufrufen. Dafür muss jedoch
on $PATH ~/bin vor /usr/bin/ stehen.

Haveaniceday
 
Aber wie gesagt es ist eine absolute Krückenlösung, sowas macht man normalerweise nicht.

...weil damit ja auch ein Alias definiert wird, welches ein ungültiges Kommando auslöst.

Code:
03:47 hoppers:~ # dup
bash: -v: command not found

Das ist also wirklich nicht lupenrein sauber, aber mir ehrlich gesagt wurscht, denn das haut genau so hin, wie ich es mir wünsche.

Code:
03:48 hoppers:~ # alias zypper="zypper "  dup="-v dup"
03:49 hoppers:~ # zypper dup
Ausführlichkeitsgrad: 1 [← Das wollte ich haben!]
Ziel wird initialisiert
Überprüfe, ob die Metadaten für X11:Windowmanagers aufgefrischt werden müssen.
Lade herunter: repomd.xml [fertig]
Überprüfe, ob die Metadaten für KDE:KDE4-Factory-Desktop aufgefrischt werden müssen.
[...]

@haveaniceday: Sehr nette Variante, die ich mir auf jeden Fall merke - aber bezüglich dessen, was ich erreichen wollte, nicht ganz ins Schwarze treffend. Trotzdem danke!
 
Oben