Pipe-Ausgabedatei in UNIX-Tool

1545
timkl

Ich möchte die Ausgabedatei vom Befehlszeilen-Audiotool SoX an das E-Mail-Tool mutt weiterleiten.

Was ich tun möchte, ist so ähnlich:

sox /Users/someUser/Desktop/input.mp3 output.mp3 | mutt -s "someSubject" -a [output-from-sox] some@recipient.com 

Ich weiß nicht, wie ich das machen soll, ist in eckige Klammern gehüllt.

Ich bin ein Unix-Neuling, daher wären alle Hinweise sehr dankbar.

0
Sie meinen nicht sox /Users/someUser/Desktop/input.mp3 output.mp3; mutt -s "someSubject" -a output.mp3 some @ receiver.com`, oder? Sie möchten die * Befehlszeilenausgabe * senden? Daniel Beck vor 13 Jahren 0
Ich möchte, dass Sox die MP3-Datei ausgibt und diese Datei per E-Mail verschickt. Ich weiß nicht, ob mein Pipe-Ansatz der richtige Weg ist, dies zu tun: S timkl vor 13 Jahren 0
Da Ihr `sox`-Aufruf` output.mp3` schreibt, verwenden Sie diesen einfach so, wie ich es vorgeschlagen habe, und löschen Sie ihn nach dem Senden. Falls das Senden fehlschlägt oder ähnliches, haben Sie immer noch die Datei, um es erneut zu versuchen. Daniel Beck vor 13 Jahren 0
Statt zu verwenden; Um die Befehle voneinander zu trennen, verwenden Sie &&, damit der zweite Befehl nur ausgeführt wird, wenn der erste Befehl erfolgreich war. Majenko vor 13 Jahren 1
Es ist ein Applescript, das diese Zeile an das Terminal sendet, daher möchte ich es in einer Zeile behalten. timkl vor 13 Jahren 0
@ Matt Cool, ich werde das untersuchen :) timkl vor 13 Jahren 0
Was versuchst du da mit sox, die mp3-Datei neu zu komprimieren? (siehe http://sox.sourceforge.net/sox.html) rakslice vor 13 Jahren 0
Es sollte hinzugefügt werden, dass es üblich ist, stdin / stdout als einfachen Bindestrich `-` zu bezeichnen, wenn Eingabe- / Ausgabedatei-Argumente berücksichtigt werden. Siehe beispielsweise in der Manpage [cat (1)] (http://www.freebsd.org/cgi/man.cgi?query=cat&sektion=1). przemoc vor 13 Jahren 1

1 Antwort auf die Frage

2
rakslice

Eine Pipe in einem Unix-ähnlichen Betriebssystem dient zum Ausführen eines Programms, wobei seine Standardausgabe (die sonst zum Bildschirm gehen würde) und als Eingabe für ein anderes Programm verwendet wird (anstelle der Standardeingabe, die normalerweise von der Tastatur kommt.) ).

Anscheinend möchten Sie, dass ein Programm in eine Datei ausgegeben wird und dass dann ein anderes Programm die Datei als Eingabe verwendet . Dafür brauchst du keine Pfeife.

Um ein Programm nach dem anderen auszuführen, verwenden Sie ;. Zum Beispiel:

sox /Users/someUser/Desktop/input.mp3 output.mp3 ; mutt -s "someSubject" -a output.mp3 some@recipient.com 

Unix-Befehlszeilenprogramme geben einen "Beendigungsstatus" oder "Rückkehrcode" aus. Die meisten Programme geben 0 aus, um anzuzeigen, dass sie ihr Ding erfolgreich ausgeführt haben, oder einen anderen Wert, wenn ein Problem aufgetreten ist. Wenn Ihr erster Befehl so ist, verwenden Sie &&anstelle von ;nur den zweiten Befehl, wenn der erste Befehl erfolgreich war. Zum Beispiel:

sox /Users/someUser/Desktop/input.mp3 output.mp3 && mutt -s "someSubject" -a output.mp3 some@recipient.com 
Wirklich hilfreiche Erklärung, vielen Dank! :) timkl vor 13 Jahren 0