Pipe-Ausgabedatei in UNIX-Tool

0

Ich möchte die Ausgabedatei vom Kommandozeilen-Audio-Tool SoX in das E-Mail-Tool mutt leiten.

Was ich tun möchte, ist etwas Ähnliches:

sox /Users/someUser/Desktop/input.mp3 output.mp3 | mutt -s "someSubject" -a [output-from-sox] [email protected]

Was ich nicht weiß, ist in eckige Klammern eingeschlossen.

Ich bin ein UNIX-Neuling, daher sind alle Hinweise sehr willkommen.

timkl
quelle
Du meinst doch nicht sox /Users/someUser/Desktop/input.mp3 output.mp3 ; mutt -s "someSubject" -a output.mp3 [email protected]? Sie möchten die Befehlszeilenausgabe senden ?
Daniel Beck
Ich möchte, dass sox die MP3-Datei ausgibt und mutt diese Datei per E-Mail versendet. Ich weiß nicht , ob meine Pfeife Ansatz ist der richtige Weg , dies zu tun: S
timkl
Warum verwenden Sie den soxAnruf output.mp3nicht einfach so, wie ich ihn vorgeschlagen habe, und löschen ihn nach dem Senden? Falls das Senden fehlschlägt oder so, haben Sie immer noch die Datei, um es erneut zu versuchen.
Daniel Beck
1
Anstatt zu verwenden; Verwenden Sie zum Trennen der Befehle &&, damit der zweite Befehl nur ausgeführt wird, wenn der erste erfolgreich war.
Majenko
1
Es ist erwähnenswert, dass in der Regel stdin / stdout als einzelner Bindestrich bezeichnet wird -, wenn Argumente für Eingabe- / Ausgabedateien berücksichtigt werden. Siehe beispielsweise das Beispiel in der Hilfeseite cat (1) .
Przemoc

Antworten:

2

Eine Pipe in einem Unix-ähnlichen Betriebssystem dient dazu, ein Programm auszuführen, seine Standardausgabe (die sonst zum Bildschirm führt) als Eingabe für ein anderes Programm zu verwenden (anstelle der Standardeingabe, die normalerweise über die Tastatur erfolgt) ).

Anscheinend möchten Sie nur ein Programm in eine Datei ausgeben und dann die Datei von einem anderen Programm als Eingabe verwenden lassen . 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 [email protected]

Unix-Kommandozeilenprogramme geben einen "Exit Status" oder "Return Code" aus. Die meisten Programme geben 0 aus, um anzuzeigen, dass sie ihre Sache erfolgreich gemacht haben, oder einen anderen Wert, wenn ein Problem aufgetreten ist. Wenn Ihr erster Befehl so lautet, verwenden Sie &&anstelle ;den zweiten Befehl nur dann auszuführen, wenn der erste erfolgreich war. Zum Beispiel:

sox /Users/someUser/Desktop/input.mp3 output.mp3 && mutt -s "someSubject" -a output.mp3 [email protected]
Rakslice
quelle
Wirklich hilfreiche Erklärung, vielen Dank! :)
timkl