bash-Variablen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
HumiNi
Beiträge: 555
Registriert: 02.10.2014 21:46:18

bash-Variablen

Beitrag von HumiNi » 13.05.2020 18:41:39

Moin,

ich hatte mich lange nicht mehr mit den Linux-Basics beschäftigt und muss jetzt feststellen, dass ich sogar einfache bash-Grundlagen vergessen habe. Ich hoffe, ihr könnt helfen.

Ich möchte mein mp3-Sammlung auf Vordermann bringen und dazu die Tags modifizieren (wegen des Abspielens auf Radios etc.). In vielen Tags steht aktuell der Albumname (als Albumname). Den möchte ich aber ändern in "Künstlername - Albumname".
Für den V1-Tag etwa so:

Code: Alles auswählen

mp3info -l $(mp3info -p "%a - %l" DATEI.mp3) DATEI.mp3
Mein Problem: Dabei müsste ich den MP3-Dateinamen zwei Mal angeben. Blöd! Das lässt sich doch sicherlich über eine bash-Variable vereinfachen?

Frage am Rande: Ich habe bisher kein Programm gefunden, welches das Auslesen einzelner ID3V2-Tags unterstützt... :?:

Danke für Anregungen.
Es macht übrigens viel wacher, den Kaffee über die Tastatur zu kippen, statt ihn zu trinken.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: bash-Variablen

Beitrag von heinz » 13.05.2020 19:18:34

entsorgt2014 hat geschrieben: ↑ zum Beitrag ↑
13.05.2020 18:41:39
Das lässt sich doch sicherlich über eine bash-Variable vereinfachen?
Meinst Du so ewas?

Code: Alles auswählen

dateiname="DATEI.mp3"
mp3info -l $(mp3info -p "%a - %l" "$dateiname") "$dateiname"
Gruss, heinz

HumiNi
Beiträge: 555
Registriert: 02.10.2014 21:46:18

Re: bash-Variablen

Beitrag von HumiNi » 13.05.2020 19:37:33

Danke für die schnelle Antwort, aber das meine ich leider nicht. Ich suche die Möglichkeit der Übergabe des Dateinamens in das "innere" Kommando ($(...)" über einen "eleganten" Parameter (Variable etc).
Es macht übrigens viel wacher, den Kaffee über die Tastatur zu kippen, statt ihn zu trinken.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: bash-Variablen

Beitrag von heinz » 13.05.2020 20:00:52

entsorgt2014 hat geschrieben: ↑ zum Beitrag ↑
13.05.2020 19:37:33
Ich suche die Möglichkeit der Übergabe des Dateinamens in das "innere" Kommando ($(...)" über einen "eleganten" Parameter (Variable etc).
Moeglicherweise fehlen nur 2 >"<

Code: Alles auswählen

dateiname="DATEI.mp3"
mp3info -l "$(mp3info -p "%a - %l" "$dateiname")" "$dateiname"
Falls es so auch nicht geht, kommt denn eine Fehlermeldung?
Bei mir funktioniert es so...

Gruss, heinz

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: bash-Variablen

Beitrag von tobo » 13.05.2020 20:32:50

Falls es jetzt nicht funktionieren sollte, dann schreibe einfach mal die Befehle, die für eine mp3-Datei durchlaufen werden sollen, auseinandergezogen und untereinander hin. Dann kann man sich selbst ein Bild über den Ablauf machen. Und unter Umständen noch den "eleganten" Parameter näher erklären!?

HumiNi
Beiträge: 555
Registriert: 02.10.2014 21:46:18

Re: bash-Variablen

Beitrag von HumiNi » 13.05.2020 20:38:07

Das funktioniert so, keine Frage, Es ist aber - sagen wir - unschön. :wink:
Wenn das Ganze mal in einem Scrript (Schleife) läuft, möchte ich ungern den String des oder die Variable mit dem Dateinamen(s) 2x in einer Zeile sehen (oder viel schlimmer: sehen lassen).
Das ist ungefähr wie Sandalen mit Tennissocken. 8O
Es macht übrigens viel wacher, den Kaffee über die Tastatur zu kippen, statt ihn zu trinken.

HumiNi
Beiträge: 555
Registriert: 02.10.2014 21:46:18

Re: bash-Variablen

Beitrag von HumiNi » 13.05.2020 20:47:52

Wenn das Ganze mal in einem Scrript (Schleife) läuft, möchte ich ungern den String des oder die Variable mit dem Dateinamen(s) 2x in einer Zeile sehen (oder viel schlimmer: sehen lassen).
Das Beispiel war unglücklich.

Ich möchte das Kommando auch interaktiv benutzen - mehrfach nacheinander für mehrere MP3s. In meiner bisherigen Version müsste ich für jede Datei das Kommando an 2 Stellen anpassen. Dazu bin ich einfach zu faul. :wink:
Es macht übrigens viel wacher, den Kaffee über die Tastatur zu kippen, statt ihn zu trinken.

ren22

Re: bash-Variablen

Beitrag von ren22 » 13.05.2020 21:11:59

Vielleicht wärst Du mal so freundlich und könntest dein Bashscript / Code posten oder soll das eine Raterunde werden ? ... um ehrlich zu sein verstehe ich auch garnicht was Du genau möchtest. was ist den bei Dir interaktiv... für sowas würde eine Funktion mit Rückgabewert z.B in Frage kommen ..

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: bash-Variablen

Beitrag von heinz » 13.05.2020 21:16:35

entsorgt2014 hat geschrieben: ↑ zum Beitrag ↑
13.05.2020 20:47:52
Ich möchte das Kommando auch interaktiv benutzen - mehrfach nacheinander für mehrere MP3s.
Du gibst leider nur sehr wenige Infos, also Rate ich mal drauflos...

Du moechtest eine Benutzeroberflaeche?
Dann ist vlt. dialog etwas fuer Dich.

Oder sollen einfach alle mp3-Dateien im aktuellen Verzeichnis bearbeitet werden.
Dann mach eine Schleife drumrum. (Ungetestet!)

Code: Alles auswählen

while read
do
    mp3info -l "$(mp3info -p "%a - %l" "$REPLY")" "$REPLY"
done <<<"$(ls -1 *.mp3)"
entsorgt2014 hat geschrieben: ↑ zum Beitrag ↑
13.05.2020 20:47:52
In meiner bisherigen Version müsste ich für jede Datei das Kommando an 2 Stellen anpassen.
Warum an 2 Stellen? Es aendert sich doch nur der Dateiname.

Gruss, heinz

HumiNi
Beiträge: 555
Registriert: 02.10.2014 21:46:18

Re: bash-Variablen

Beitrag von HumiNi » 13.05.2020 21:38:50

Vielleicht wärst Du mal so freundlich und könntest dein Bashscript / Code posten
Steht in meinem Ausgangsposting.

Code: Alles auswählen

mp3info -l $(mp3info -p "%a - %l" DATEI.mp3) DATEI.mp3
Da steht in einem Kommando 2x DATEI.mp3 oder eben die Variable mit dem Inhalt "DATEI.mp3".
Stelle dir mal vor, du willst diese Zeile mehrfach hintereinander in unterschiedlichen Verzeichnissen für unterschiedlich Dateinamen aufrufen. Du copy_pastest dir doch die Finger wund. 1 Änderung pro Datei würde mir echt reichen.

Achso interaktiv. Wurde bei uns früher (lang ist es her) für Kommandoeingabe per Hand benutzt. Also: Man sucht aus dem fertigen Script (mit Schleife usw.) das wesentliche Kommando, welches die eigentliche Arbeit ausführt, und ruft es nach minimalen Änderungen (Dateiname für Variable) für einzelne Dateien direkt in der bash auf.

Das ist für mich jetzt ca. 10 Jahre her. Deshalb suche ich etwas Unterstützung.
Es macht übrigens viel wacher, den Kaffee über die Tastatur zu kippen, statt ihn zu trinken.

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: bash-Variablen

Beitrag von eggy » 13.05.2020 21:54:02

entsorgt2014 hat geschrieben: ↑ zum Beitrag ↑
13.05.2020 21:38:50
Stelle dir mal vor, du willst diese Zeile mehrfach hintereinander in unterschiedlichen Verzeichnissen für unterschiedlich Dateinamen aufrufen. Du copy_pastest dir doch die Finger wund. 1 Änderung pro Datei würde mir echt reichen.
Deswegen schreibt man sich, wo es sinnvoll erscheint, Funktionen.

Script posten klingt nach ner guten Idee, hier gibts nen paar Leutchen, die sich mit bash ganz gut auskennen und sicher gerne Verbesserungstips unterbreiten.

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: bash-Variablen

Beitrag von MSfree » 13.05.2020 21:55:36

entsorgt2014 hat geschrieben: ↑ zum Beitrag ↑
13.05.2020 21:38:50
Stelle dir mal vor, du willst diese Zeile mehrfach hintereinander in unterschiedlichen Verzeichnissen für unterschiedlich Dateinamen aufrufen.
Dann schreibt man sich ein Skript, z.B. mit Namen mp3dingbums

vi mp3dingsbums
und für dort folgende Zeilen ein:

Code: Alles auswählen

#!/bin/bash
dateiname=$1
mp3info -l $(mp3info -p "%a - %l" $dateiname) $dateiname
mache das Skript nun ausführbar mit

Code: Alles auswählen

chmod +x mp3dingsbums
dann kannst du das Skript mit

Code: Alles auswählen

mp3dingsbums heino-schwarze_haselnuss.mp3
oder auch mit

Code: Alles auswählen

mp3dingsbums mina-heißer_sand.mp3
aufrufen.

HumiNi
Beiträge: 555
Registriert: 02.10.2014 21:46:18

Re: bash-Variablen

Beitrag von HumiNi » 13.05.2020 22:08:50

Ich glaube, so komme ich weiter:

vorher:

Code: Alles auswählen

mp3info -l $(mp3info -p "%a - %l" DATEI.mp3) DATEI.mp3
jetzt:

Code: Alles auswählen

mp3info -l $(mp3info -p "%a - %l" "$_") DATEI.mp3
Immer noch nicht perfekt, aber für diesen Zweck ausreichend.

Ich danke allen fürs Mitdenken. :)
Es macht übrigens viel wacher, den Kaffee über die Tastatur zu kippen, statt ihn zu trinken.

Antworten