Tücken bei Verzeichniswechsel in bash-script[gelöst]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
uwepr
Beiträge: 657
Registriert: 03.02.2007 12:13:01
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Halle/S.
Kontaktdaten:

Tücken bei Verzeichniswechsel in bash-script[gelöst]

Beitrag von uwepr » 10.07.2007 13:01:34

Liebe Debianer,
folgende Schwierigkeit: Meine Kamera liefert */JPG. Ich möchte ein script erstellen, welches per Starter/Menueintrag gestarted wird,ein Fenster ploppt auf, ich gebe das zu bearbeitende Verzeichnis ein, alle darin befindlichen *:JPG werden in *.jpg umbenannt, anschließend deren Rechte auf 644 gesetzt (udev vergibt an *.XXX 600 bei'm Kopieren). Dabei gibt es ein Problem mit ~

Code: Alles auswählen

#!/bin/bash
kdialog --inputbox Pfad >/tmp/OUTPUT
VAR= ;
VAR="$(cat /tmp/OUTPUT)" ;
cd $VAR ;
if  find *.JPG >&/dev/null
then
     mmv "*.JPG" "#1.jpg"
     chmod 644 *.jpg
     kdialog --msgbox erledigt
else
     kdialog --msgbox "Keine *.JPG zum Umwandeln gefunden"
fi ;
exit 0
erledigt die Aufgabe,wenn z.B.

/home/uwe/Pic

in die inputbox eingegeben wird. Bei der Schreibweise

~/Pic

versagt das script.

Mit

Code: Alles auswählen

#!/bin/bash
kdialog --inputbox Pfad >/tmp/OUTPUT
cat /tmp/OUTPUT | sed 's/~/\/home\/uwe/' >/tmp/OUTPUTB ;
VAR= ;
VAR="$(cat /tmp/OUTPUTB)" ;
cd $VAR ;
if  find *.JPG >&/dev/null
then
     mmv "*.JPG" "#1.jpg"
     chmod 644 *.jpg
     kdialog --msgbox erledigt
else
     kdialog --msgbox "Keine *.JPG zum Umwandeln gefunden"
fi ;
exit 0
funktioniert die Schreibweise

~/Pic

, das script müßte aber für jeden User angepaßt werden.
Frage: Gibt es eine Möglichkeit, ~ durch Auslesen von $HOME zu ersetzen? Mit sed habe ich das bisher nicht hinbekommen:

Code: Alles auswählen

uwe@debian-uwe:~$ kdialog --inputbox Pfad >/tmp/OUTPUT
uwe@debian-uwe:~$ cat /tmp/OUTPUT
~/Pic
uwe@debian-uwe:~$ cat /tmp/OUTPUT | sed 's/~/"$HOME"/' >/tmp/OUTPUTB
uwe@debian-uwe:~$ cat /tmp/OUTPUTB
"$HOME"/Pic
uwe@debian-uwe:~$ cat /tmp/OUTPUT | sed 's/~/$HOME/' >/tmp/OUTPUTB
uwe@debian-uwe:~$ cat /tmp/OUTPUTB
$HOME/Pic

Vielen Dank im Voraus!
Uwe Pr.
Zuletzt geändert von uwepr am 11.07.2007 17:38:36, insgesamt 1-mal geändert.
squeeze/fluxbox

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: Tücken bei Verzeichniswechsel in bash-script

Beitrag von Danielx » 10.07.2007 20:48:58

Uwe Pr. hat geschrieben:Frage: Gibt es eine Möglichkeit, ~ durch Auslesen von $HOME zu ersetzen? Mit sed habe ich das bisher nicht hinbekommen:
Mit sed:

Code: Alles auswählen

cat /tmp/OUTPUT | sed "s:~:${HOME}:" >/tmp/OUTPUTB ;
Da gibt es aber auch andere Möglichkeiten ohne sed.

Gruß
Daniel

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Re: Tücken bei Verzeichniswechsel in bash-script

Beitrag von Joghurt » 10.07.2007 20:51:44

Uwe Pr. hat geschrieben:

Code: Alles auswählen

#!/bin/bash
kdialog --inputbox Pfad >/tmp/OUTPUT
VAR= ;
VAR="$(cat /tmp/OUTPUT)" ;
cd $VAR
Das ließe sich übrigens so schreiben:

Code: Alles auswählen

cd $(kdialog --inputbox Pfad)

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: Tücken bei Verzeichniswechsel in bash-script

Beitrag von Danielx » 10.07.2007 21:04:19

Joghurt hat geschrieben:Das ließe sich übrigens so schreiben:

Code: Alles auswählen

cd $(kdialog --inputbox Pfad)
Bei ~ als Eingabe funktioniert das aber nicht.
Gibt es dafür eigentlich eine einfache Lösung?

Benutzeravatar
uwepr
Beiträge: 657
Registriert: 03.02.2007 12:13:01
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Halle/S.
Kontaktdaten:

Beitrag von uwepr » 11.07.2007 09:51:47

Hallo,Ihr Lieben,
Danke für Eure Antworten,
@Danielx,es hat mit Deiner code-Zeile geklappt, mein Problem ist damit gelöst.
@Joghurt,bei mir funktioniert die Kommandosubstitution entsprechend Deiner Zeile nicht. Ich hatte das selber schon so versucht und habe keine Ahnung, wieso

kdialog --inputbox Pfad

eine korrekte Ausgabe im Terminal liefert, cd damit aber in

cd $(kdialog --inputbox Pfad)

einfach hängen bleibt. :?: sehr mysteriös.Deshalb die Konstruktion mit VAR und cat. Aus diesem Grund und wegen
Da gibt es aber auch andere Möglichkeiten ohne sed.
Gibt es dafür eigentlich eine einfache Lösung?
setze ich den thread noch nicht auf [gelöst].
Viele Grüße! Uwe Pr.

gleich noch ein edit:hatte zum Thema "Verzeichniswechsel in shell-script" bereits gegoogelt und nichts wirklich brauchbares gefunden.

edit2: Aaaahh,es dämmert:
type cd

Und genau deshalb funktioniert auch nicht

kdialog --inputbox Pfad | cd

;-)
squeeze/fluxbox

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: Tücken bei Verzeichniswechsel in bash-script

Beitrag von Danielx » 11.07.2007 13:03:23

Die ersten Zeilen könntest du auch so schreiben:

Code: Alles auswählen

cd "$(echo "$(kdialog --inputbox Pfad)" | sed "s:~:${HOME}:")"
:)

Benutzeravatar
uwepr
Beiträge: 657
Registriert: 03.02.2007 12:13:01
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Halle/S.
Kontaktdaten:

Beitrag von uwepr » 11.07.2007 17:37:57

Danke, Danielx,
das dürfte die eleganteste Lösung sein.
Sich verneig! :)
Uwe Pr.
squeeze/fluxbox

Benutzeravatar
uwepr
Beiträge: 657
Registriert: 03.02.2007 12:13:01
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Halle/S.
Kontaktdaten:

Beitrag von uwepr » 12.07.2007 12:41:41

Hallo, Ihr Lieben,
wollte Euch bloß noch mitteilen, wie die "Endprodukte" aussehen:

Code: Alles auswählen

#!/bin/bash
#KJPGstart
cd "$(echo "$(kdialog --inputbox "Pfad zu den umzuwandelnden *.JPG")" | sed "s:~:${HOME}:")" ;
if  find *.JPG >&/dev/null
then
     mmv "*.JPG" "#1.jpg"
     chmod 644 *.jpg
     kdialog --msgbox erledigt
else
     kdialog --msgbox "Keine *.JPG zum Umwandeln gefunden"
fi ;
exit 0
Unter KDE läuft das prima.Da unter fluxbox für kdialog erstmal das halbe kde gestarted wird, sieht die Version für fluxbox mit xdialog so aus:

Code: Alles auswählen

#!/bin/bash
#XJPGstart
cd "$(echo "$(Xdialog --stdout --inputbox "Pfad zu den umzuwandelnden *.JPG" 6 35)" | sed "s:~:${HOME}:")" ;
if  find *.JPG >&/dev/null
then
     mmv "*.JPG" "#1.jpg"
     chmod 644 *.jpg
     Xdialog --msgbox erledigt 6 30
else
     Xdialog --msgbox "Keine *.JPG zum Umwandeln gefunden" 6 35
fi ;
exit 0
:D
Viele Grüße! Uwe Pr.
squeeze/fluxbox

Antworten