• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Mit echo Befehle in einer Zeile verknüpfen

mayflower

Neu angemeldet

Registriert
13 Jan. 2016
Beiträge
32
Hi,

ich komm hier nicht weiter. Ich will Aufrufe für ffmpeg in ein Shell-Script speichern und das dann aufrufen. Ich will die Ausgabedatei nach ffmpeg noch umbenennen. Das Ergebnis soll so aussehen:

[src=c]ffmpeg -i input -acodec mp3 output-temp ; mv output-temp output[/src]

Wieso das mv? Ich will später noch einbauen, dass im Falle eines Abbruchs des Scriptes die unfertige Ausgabedatei gelöscht wird. Ich muss ja aber irgendwie fertige von unfertigen unterscheiden können. Da ich das ganze per For-Scleife mache sieht mein Script dafür so aus:

[src=c]for file ; do
echo -n ffmpeg -i "$file" -acodec mp3 "$file"-temp >> /tmp/ffmpeg.sh ; echo mv "$file"-temp "$file"-new.mp3 >> /tmp/fmpeg.sh
done[/src]

Das fertige Shell-Script beinhaltet dann für jede MP3-Datei eine Zeile, jede Zeile besteht aus 1x ffmpeg und 1x mv. Wie ich im Falle eines Abbruchs des Scriptes das löschen umsetze weiß ich noch nicht, das kommt später. Aber irgendwie funktioniert das mit dem Shell-Script nicht. Das Ergebnis ist hier:

[src=c]ffmpeg -i input -acodec mp3 output-tempmv output-temp output[/src]

Es wird also das mv ohne Leerzeichen und ohne ; an ffmpeg gequetscht. Ich vermute er interpretiert hier das ; als Trennung für die beiden echo-Aufrufe. Wenn ich aber z. B. dazwischen ein

[src=c]echo ";"[/src]

einfüge, wird das komplett ignoriert.
 

LZ9900

gesperrt

Registriert
17 Juli 2013
Beiträge
527
Ort
Berlin
Ich bin nicht sicher, was du erreichen willst. Vielleicht so was:

[src=bash]echo "\";" weiter mit Befehlen"\""[/src]


Ausgabe:

Code:
"; weiter mit Befehlen"
 
Zuletzt bearbeitet:

mayflower

Neu angemeldet

Registriert
13 Jan. 2016
Beiträge
32
  • Thread Starter Thread Starter
  • #3
OK, das geht erstmal. Hier passiert dann aber etwas komisches. Ich lasse mir eine Dateiliste mit Kommando erstellen die ausgeführt werden sollen. Ich führe aber die Datei nicht direkt aus, sondern nutze eine while-Schleife um die einzelnen Kommandos auszulesen und zu starten. Die abgearbeitete Zeile wird gelöscht. Am Ende beginnt das ganze von vorne, falls die Datei leer ist bricht die Schleife ab. So kann ich auch Kommandos ausführen lassen die nachträglich in die Dateiliste kopiert wurden, als der ganze Prozess schon lief. Die While-Schleife sieht so aus:
while true ; do
count=$(cat command-list | wc -m )
if [ "$count" -ge 1 ] ; then
while read zeile; do
$zeile
sed -i '1,1 d' command-list
done < command-list
else
break
fi
done

So ein Kommando in der command-list kann z. B. so aussehen:

ffmpeg -i input -acodec mp3 output-temp ; mv output-temp output

Das Kommando funktioniert wenn ich es allein in einem Terminal starten würde und wenn ich die 'command-list' ausführbar mache und per ./command-list ausführe. Es geht aber nicht, wenn ich die command-list zeilenweise auslesen und die Kommandos starte mit o.g. While-Schleife. Da kommt die Fehlermeldung:

Unable to find a suitable output format for ';'
;: Invalid argument

Er scheint also && oder ; als Teil des FFmpeg-Aufrufs zu interpretieren und nicht als "Trenner" zwischen 2 separaten KOmmandos. Wieso passiert das aber nur wenn ich das ganze per While-Schleife ausführen lasse?
 

musv

Bekannter NGBler

Registriert
15 Juli 2013
Beiträge
3.453
Ort
/dev/null
Schreib mal, was du eigentlich erreichen willst. Und damit mein ich nicht die Codefragmente, sondern was die ursprüngliche Aufgabe ist.

Ich denke, durch Deine Scripte baust du eine fragile Umgebung auf, die eigentlich so nicht sein müsste.
 

PLanB

NGBler

Registriert
29 Juli 2013
Beiträge
208
Das wirkt wirklich unnötig kompliziert. Wieso baust du erst eine Komamandoliste die du ausführst anstatt die Befehle direkt ausführen zu lassen?
Du könntest nach jedem ffmpeg Befehl mittels if $? prüfen was der Rückgabewert der Funktion war und so Fehler direkt erkenne und löschen. Darüber hinaus stellt sich die Frage: Wenn du schon ein Script schreibst, wieso soll das alles aus one-linern bestehen? Du kannst auch Funktionen bilden welche als Übergabeparameter deine "command-list" Parameter beinhalten.


Alles in allem wirkt der Ansatz wirr. Bitte einmal wie musv schrieb die genauen Anforderungen spezifizieren.
 

musv

Bekannter NGBler

Registriert
15 Juli 2013
Beiträge
3.453
Ort
/dev/null
Du könntest nach jedem ffmpeg Befehl mittels if $? prüfen was der Rückgabewert der Funktion war und so Fehler direkt erkenne und löschen.
Eigentlich würde wohl schon sowas reichen (ungetestet).

[src="bash"] for file ; do
echo -n ffmpeg -i "$file" -acodec mp3 "$file"-new.mp3 || rm "$file"-new.mp3
done
[/src]

Dabei bin ich mir nicht mal sicher, ob ffmpeg das sogar nicht selbst löscht, falls es fehlschlägt.
 

musv

Bekannter NGBler

Registriert
15 Juli 2013
Beiträge
3.453
Ort
/dev/null
Ist korrekt. Und dann ist da natürlich noch die Frage, ob man mp3 überhaupt haben will. Aber das hängt vom Zielgerät ab.

Ich bin vor ein paar Jahren mal auf Ogg gewechselt (verwendet u.a. Spotify). Mittlerweile verwende ich aber nur noch flac, da lossless.
 
Oben