Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Problem mit alias in der bash

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
ojkastl
Hacker
Hacker
Beiträge: 547
Registriert: 15. Dez 2004, 04:51
Wohnort: Erlangen
Kontaktdaten:

Problem mit alias in der bash

Beitrag von ojkastl »

Hallo,

da ich recht oft per md5sum Dateien überprüfe, wollte ich mir einen alias anlegen:

Code: Alles auswählen

alias MD5SUM='nice -n 19 md5sum -c $1'
$1 ist hier die Datei, in der die MD5-Summen stehen, die als Argument angegeben wird (MD5SUM blabla.md5).

So gehts, allerdings kommt kein Beep am Schluss. Deswegen hab ich das hier probiert:

Code: Alles auswählen

alias MD5SUM='nice -n 19 md5sum -c $1 ;beep'
was allerdings nicht klappt. Da geht gar nix. Wie kann ich denn das beep da anhängen? Auch den alias für das beep auflösen (echo ...) geht nicht.

Wie kann ich das lösen?
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

Code: Alles auswählen

alias MD5SUM='nice -n 19 md5sum -c $1 ;beep'
Das Problem ist nicht, dass alias keine aliasse auflösen oder mehrere Befehle hintereinander ausführen kann. Das Problem ist in deinem Fall, dass alle Parameter an beep übergeben werden. Die Lösung wäre eine function:

Code: Alles auswählen

MD5SUM () { nice -n 19 md5sum -c $*; beep; }
Und wenn du die function exportieren willst:

Code: Alles auswählen

export -f MD5SUM
Ich weiß nicht mit Sicherheit, ob es für alias auch eine Lösung gibt. Auf jeden Fall scheint sich alias um das "$1" bzw. "$*" nicht zu kümmern...
ojkastl
Hacker
Hacker
Beiträge: 547
Registriert: 15. Dez 2004, 04:51
Wohnort: Erlangen
Kontaktdaten:

Beitrag von ojkastl »

Da ich erstmal nicht weiss, wie ich oben genannten Einzeiler (deinen) verwenden soll, steh ich da wie der Ochs vorm Berg.

Ich vermute eher, dass das beep als Argument für das md5sum genommen wird. Oder sonstwas seltsames passiert.
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

alias direkt ist nur ein Präprozessor, der sich nicht um irgendwelche Variablen kümmert, d.h. das $* interessiert ihn nie, die Ersetzung einer Zeile

Code: Alles auswählen

FOO do something
bei einem Alias

Code: Alles auswählen

FOO='cmd $*; blah '
wird zu "cmd blah do something"


ein kleines Experiment:

Code: Alles auswählen

alias FOO='echo "$*" ; echo "-------" ; echo '
So wenn jetzt was übergeben würde, müsste Echo da was ausspucken... probier jetzt einfach mal ein

Code: Alles auswählen

FOO das ist ein Test
aus...

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

Saber_Rider hat geschrieben:Da ich erstmal nicht weiss, wie ich oben genannten Einzeiler (deinen) verwenden soll
Ganz einfach: ersetze deine Zeile

Code: Alles auswählen

alias MD5SUM='nice -n 19 md5sum -c $1 ;beep'
durch meine Zeile

Code: Alles auswählen

MD5SUM () { nice -n 19 md5sum -c $*; beep; }
Die Benutzung ist dieselbe.
Ich vermute eher, dass das beep als Argument für das md5sum genommen wird.
Irrtum. Siehe Beispiel von TeXpert
ojkastl
Hacker
Hacker
Beiträge: 547
Registriert: 15. Dez 2004, 04:51
Wohnort: Erlangen
Kontaktdaten:

Beitrag von ojkastl »

Danke euch beiden.

@notoxp:

Ich war mir nicht sicher, ob ich das mit alias davor oder nicht oder ...
Aber jetzt gehts.

@TeXpert:

Jetzt hab ich es verstanden. Danke.
Antworten