alias funktioniert nicht

bsdfreak

Well-Known Member
Ich habe folgenden alias in der .kshrc angelegt:
Code:
alias flower='mpg123 http://de1.streamingpulse.com:7016/stream &'

Der aber funktioniert nur, wenn ich & am Ende weglasse. Das ist mein Lieblingssender flowerpower radio. Dann aber blockiert er natürlich das Terminal. weil mpg123 als Process wohl im Vordergrund läuft.
 
Funktioniert es denn prinzipiell als Backgroundprocess wenn du es normal ausführst? Bei mir zumindest nicht (bin aber nicht auf OpenBSD).
 
Moin,

muss es den ein mpg123 sein?
Ich nutze auf Console cmus und den kann man in den Hintergrund schieben oder in einem tmux laufen lassen.
Alternativ gibt es noch ffplay von FFMPEG den man probieren kann.
Oder als dritte Variante den mpd (Music Player Daemon)
 
Das sind ja zwei Probleme :) mpg123 versucht auf die TTY zu schreiben, das geht im Hintergrund nicht, weshalb die Shell ein SIGSTOP sendet. Damit blockiert der Prozess, bis er wieder in den Vordergrund geholt wird, wo er schreiben kann und die Shell entsprechend ein SIGCONT sendet. Das ließe sich umgehen, indem man mpg123 in einer Subshell startet, wodurch die TTY von mpg123 von der TTY der Shell separiert wird. In etwa so: (mpg123 -q http://de1.streamingpulse.com:7016/stream &)

Das geht (in den meisten Shells) allerdings nicht, weil sich Aliase auf Kommandos beziehen und nicht generell auf Shell Syntax. Überhaupt sind Aliase in ihren Möglichkeiten erschreckend begrenzt, sobald mehr als ein einfaches "Ersetze A durch B" möchte. Daher ist es meist eine gute Idee, wenn man komplexere Dinge will, anstelle eine Alias eine Funktion zu definieren:

Code:
flower() {
    (mpg123 -q http://de1.streamingpulse.com:7016/stream &)
}

Wobei das aufrund der Subshell Auswirkungen auf die Darstellung des Prompt haben kann, je nachdem, wie genau es implementiert ist.
 
Funktioniert es denn prinzipiell als Backgroundprocess wenn du es normal ausführst? Bei mir zumindest nicht (bin aber nicht auf OpenBSD).
Nein, habe ich bereits gerade ausprobiert. Das scheint aber ein Problem mit mpg123 zu sein, denn wenn ich einen alias f für firefox anlege alias f='firefox-esr &', das funktioniert.
 
Moin,

muss es den ein mpg123 sein?
Ich nutze auf Console cmus und den kann man in den Hintergrund schieben oder in einem tmux laufen lassen.
Alternativ gibt es noch ffplay von FFMPEG den man probieren kann.
Oder als dritte Variante den mpd (Music Player Daemon)
Nöö, aber Deine Anwendungen kenn ich nicht, kann ich aber morgen mal ausprobieren und antesten. ffplay kenn ich natürlich auch.
 
Das sind ja zwei Probleme :) mpg123 versucht auf die TTY zu schreiben, das geht im Hintergrund nicht, weshalb die Shell ein SIGSTOP sendet. Damit blockiert der Prozess, bis er wieder in den Vordergrund geholt wird, wo er schreiben kann und die Shell entsprechend ein SIGCONT sendet. Das ließe sich umgehen, indem man mpg123 in einer Subshell startet, wodurch die TTY von mpg123 von der TTY der Shell separiert wird. In etwa so: (mpg123 -q http://de1.streamingpulse.com:7016/stream &)

Das geht (in den meisten Shells) allerdings nicht, weil sich Aliase auf Kommandos beziehen und nicht generell auf Shell Syntax. Überhaupt sind Aliase in ihren Möglichkeiten erschreckend begrenzt, sobald mehr als ein einfaches "Ersetze A durch B" möchte. Daher ist es meist eine gute Idee, wenn man komplexere Dinge will, anstelle eine Alias eine Funktion zu definieren:

Code:
flower() {
    (mpg123 -q http://de1.streamingpulse.com:7016/stream &)
}

Wobei das aufrund der Subshell Auswirkungen auf die Darstellung des Prompt haben kann, je nachdem, wie genau es implementiert ist.
Das mag alles stimmen, aber unter Linux funktioniert das einwandfrei und problemlos. Eigentlich widerstrebt es mir Linux zum Vergleich heranzuziehen, denn Linux ist Linux und OpenBSD ist OpenBSD.
 
Wie wir mal wieder lernen, gibt es viele verschiedene Möglichkeiten, es muß ja nicht immer mpg123 sein. Die Hilfsbereitschaft ist hier wirklich vorbildlich.
 
Nehme jetzt ffplay für den alias wie von MedV2 empfohlen, das funktioniert gut. Zum Benden der Musik habe ich den alias
Code:
alias musikaus='pkill ffplay'
eingerichtet. cmus und mpd schau ich mir dann auch mal an. Aber erst läuft es ja gut mit ffplay.
 
Das mag alles stimmen, aber unter Linux funktioniert das einwandfrei und problemlos. Eigentlich widerstrebt es mir Linux zum Vergleich heranzuziehen, denn Linux ist Linux und OpenBSD ist OpenBSD.
Dann setzt deine Linux-Distro das tostop TTY-Attribut nicht. An das hatte ich tatsächlich gar nicht gedacht. Du müsstest auch unter OpenBSD stty -tostop machen können und damit sollte mpg123 auch bei Output im Background weiterlaufen. Allzu große Nebenwirkungen sollte das nicht haben, außer das Background Jobs vielleicht ins Terminal güllen.
 
Zurück
Oben