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

Problem mit alias in der bash

ojkastl

Hacker
Hallo,

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

Code:
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:
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?
 

regexer

Advanced Hacker
Code:
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:
MD5SUM () { nice -n 19 md5sum -c $*; beep; }
Und wenn du die function exportieren willst:
Code:
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...
 
OP
O

ojkastl

Hacker
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.
 

TeXpert

Guru
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:
FOO do something
bei einem Alias
Code:
FOO='cmd $*; blah '
wird zu "cmd blah do something"


ein kleines Experiment:
Code:
alias FOO='echo "$*" ; echo "-------" ; echo '

So wenn jetzt was übergeben würde, müsste Echo da was ausspucken... probier jetzt einfach mal ein
Code:
FOO das ist ein Test
aus...
 

regexer

Advanced Hacker
Saber_Rider schrieb:
Da ich erstmal nicht weiss, wie ich oben genannten Einzeiler (deinen) verwenden soll
Ganz einfach: ersetze deine Zeile
Code:
alias MD5SUM='nice -n 19 md5sum -c $1 ;beep'
durch meine Zeile
Code:
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
 
OP
O

ojkastl

Hacker
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.
 
Oben