Autor Thema: Bash-Script. Leerzeichen in Parametern.  (Gelesen 251 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline ufh

  • Foren-Neuling
  • *
  • Beiträge: 3
  • I Love Linux-beginnerforum.de
  • Betriebssystem: Ubuntu
  • Grafische Oberfläche: Gnome
  • Hardware: Intel DN2800MT
Bash-Script. Leerzeichen in Parametern.
« am: 1.Mai 2017, 15:59:57 »
Hallo!

Ich habe hier eine Wine-Applikation, die übergibt an die zur Darstellung von
pdf ausgewählten Anwendung den Pfad aufs Dokument als

z:tmp\foobar.pdf

Damit kann evince (Dokumentenbetrachter) freilich nichts anfangen, also übergebe
ich den Pfad nicht direkt an evince, sondern folgendes Script:

#!/bin/bash
# Backslashes durch Slashes ersetzen:
File=${1//\\//}
# z: entfernen und den Pfad nach /tmp absolut machen:
File="/"${File:3}
/usr/bin/evince $File

Das klappt auch solange problemlos, wie der PDF-Dateiname keine Leerzeichen enthält;
Mit Leerzeichen bekommt evince nur den Teil vor dem ersten Leerzeichen als (implizit
ersten) Parameter übergeben: Bei zum Beispiel z:tmp\foo bar.pdf nur z:tmp\foo.

Also erstmal folgende Änderung:

#!/bin/bash
# Jetzt enthält $File alle Paramter, also den gesamten Dateinamen, falls Blanks
# drin sind. Backslashes durch Slashes ersetzen:

File=${@//\\//}
# z: entfernen und den Pfad nach /tmp absolut machen:
File="/"${File:3}
/usr/bin/evince $File

Schon einen Schritt weiter. Allerdings enthält der Parameter nun Leerzeichen, sodaß
evince meint, zwei Files öffenen zu sollen, nämlich /tmp/foo und bar.pdf. Deshalb
nächster Schritt:

#!/bin/bash
# Jetzt enthält $File alle Paramter, also den gesamten Dateinamen, falls Blanks
# drin sind. Backslashes durch Slashes ersetzen:
File=${@//\\//}
# z: entfernen und den Pfad nach /tmp absolut machen:
File="/"${File:3}
# Filenamen in Anführungszeichen setzen:
File='"'$File''"'
/usr/bin/evince $File

Das sollte doch gehen? Zumindest direkt auf der Shell simuliert, steht DORT auch
/usr/bin/evince "/tmp/foo bar.pdf" und funktioniert. Ausm Script heraus aber nicht:
evince öffnet sich nachwievor zweimal und kann freilich den jeweiligen der beiden
Filenamen nicht finden. Irgendwo sind da die Gänsefüße verschütt gegangen.

Und jetzt bin ich mit meinem Latein am Ende. Wer weiß Rat?

TIA,
Ulrich
« Letzte Änderung: 1.Mai 2017, 16:21:53 von ufh »

Offline ufh

  • Foren-Neuling
  • *
  • Beiträge: 3
  • I Love Linux-beginnerforum.de
  • Betriebssystem: Ubuntu
  • Grafische Oberfläche: Gnome
  • Hardware: Intel DN2800MT
Re: Bash-Script. Leerzeichen in Parametern.
« Antwort #1 am: 4.Mai 2017, 14:05:51 »

#!/bin/bash
# Jetzt enthält $File alle Paramter, also den gesamten Dateinamen, falls Blanks
# drin sind. Backslashes durch Slashes ersetzen:
File=${@//\\//}
# z: entfernen und den Pfad nach /tmp absolut machen:
File="/"${File:3}
# Filenamen in Anführungszeichen setzen:
File='"'$File''"'
/usr/bin/evince $File

Das sollte doch gehen? Zumindest direkt auf der Shell simuliert, steht DORT auch
/usr/bin/evince "/tmp/foo bar.pdf" und funktioniert. Ausm Script heraus aber nicht:
evince öffnet sich nachwievor zweimal und kann freilich den jeweiligen der beiden
Filenamen nicht finden. Irgendwo sind da die Gänsefüße verschütt gegangen.

Und jetzt bin ich mit meinem Latein am Ende. Wer weiß Rat?


Ich inzwischen selbst: Die Gänsefüße müssen wohl ganz zum Schluss um den
Parameter des evince. Also statt

# Filenamen in Anführungszeichen setzen:
File='"'$File''"'
/usr/bin/evince $File

ein

# Filenamen in Anführungszeichen setzen:
/usr/bin/evince "$File"

Dann klappt's auch mit der Nachbarin. Danke für eure Hilfe …