ubuntuusers.de

Syntaxproblem mit Alias-Liste

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

Krino

Avatar von Krino

Anmeldungsdatum:
31. Juli 2009

Beiträge: 1968

Hallo!

Ich lege mir gerade eine Liste mit Aliases an (~/.bash_aliases; Anleitung hier), um längere Befehlszeilen nicht im Kopf behalten zu müssen.

Ich hatte vor, diese Zeile einzufügen:

alias paklist='debfoster -sn | tail -n +2 | tr ' ' '\n' | sort -u > /home/krino/Dokumente/Settings/Paketliste/packages.list'

Das führt zu einer permanenten Fehlermeldung im Terminal:

bash: alias:  n | sort -u > /home/krino/Dokumente/Settings/Paketliste/packages.list: Nicht gefunden.

Der Grund liegt (vermute ich) darin, daß einerseits der "abzukürzende" Befehl in Hochkommata eingeschlossen werden soll, andererseits aber dieser spezielle debfoster-Befehl seinerseits Hochkommata enthält, so daß das Ganze falsch interpretiert wird.

Weiß jemand einen Workaround?

Moderiert von The Compiler:

Nach "Shell und Programmieren" verschoben. Bitte beachte vor dem Erstellen eines Themas den Beitrag "Welche Themen gehören hier her und welche nicht?" im ensprechenden Unterforum.

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2505

Ja, die Quotes sind ein Problem. Mit alias kannst du mehrere Aliase auf einmal anlegen, wenn du das hintereinander schreibst (zum Beispiel alias bla=ls blub=vim). Wenn es keine Zuweisung gibt, dann sagt er dir den aktuellen Alias an (also alias blub würde dir dann sagen, dass Vim dahintersteckt). Dann ist klar, dass dein Alias so explodiert. ☺

Wenn du es dir einfach machen willst, nimm statt eines Aliases einfach eine Funktion:

1
2
3
4
paklist()
{
	debfoster -sn | tail -n +2 | tr ' ' '\n' | sort -u > /home/krino/Dokumente/Settings/Paketliste/packages.list
}

(Du könntest dich auch mit den Quotes rumschlagen, aber das kann schnell hässlich werden. Single-Quotes kann man innerhalb von Single-Quotes nämlich nicht escapen. In diesem Fall hier könntest du zwar auch einfach Double-Quotes für tr nehmen, aber wer weiß, was als nächstes kommt. 😉)

Krino

(Themenstarter)
Avatar von Krino

Anmeldungsdatum:
31. Juli 2009

Beiträge: 1968

Hallo Vain!

Danke für die Rückmeldung.

Das mit der Funktion hört sich vielversprechend an. Ich nehme an, ich würde dann

paklist()

ins Terminal eingeben.

Aber wie und wo lege ich so eine Funktion an?

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2505

Naja, du würdest einfach nur paklist eingeben. Von der Benutzung her merkst du eigentlich keinen Unterschied zwischen Funktion oder Alias. ☺

Anlegen kannst du die Funktion dort, wo du auch den Alias angelegt hättest – also vermutlich in der .bashrc.

Krino

(Themenstarter)
Avatar von Krino

Anmeldungsdatum:
31. Juli 2009

Beiträge: 1968

Hey, das ist ja obercool!

Habe die Funktion jetzt einfach in meine Alias-Liste geschrieben, also in ~/.bash_aliases.

Klappt einwandfrei!

Erstaunlich, was man mit Linux alles anstellen kann... ☺

Zombie_im_Bademantel

Avatar von Zombie_im_Bademantel

Anmeldungsdatum:
13. April 2005

Beiträge: 655

Krino schrieb:

Der Grund liegt (vermute ich) darin, daß einerseits der "abzukürzende" Befehl in Hochkommata eingeschlossen werden soll, andererseits aber dieser spezielle debfoster-Befehl seinerseits Hochkommata enthält, so daß das Ganze falsch interpretiert wird.

Nur der Vollständigkeit halber: du hättest auch die einfachen Hochkommata im Befehl durch doppelte ersetzen können:

alias paklist='debfoster -sn | tail -n +2 | tr " " "\n" | sort -u > /home/krino/Dokumente/Settings/Paketliste/packages.list'

Krino

(Themenstarter)
Avatar von Krino

Anmeldungsdatum:
31. Juli 2009

Beiträge: 1968

Vielen Dank, Zombie!

Ja, das funktioniert auch. Hätte ich eigentlich auch selber drauf kommen können... 😉

Antworten |