Shellprogrammierung - Übergabe eines Dateidescriptors an ein Script

Message
Author
User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#16 Post by Janka »

wodim wrote:
wodim wrote:

Code: Select all

echo $@ >&2
liefert (Beispiel):

Code: Select all

/mnt/data/Geraete/HiFiRack/pre/AmpLog/amp_log.asc

Code: Select all

echo $1 >&2
übrigens auch.
Aber sobald ein Leerzeichen im Pfad oder Dateinamen auftaucht, wird der String da abgehackt. Bei $1, nicht bei $@.

Wer hat eine plausible Erklärung dafür?
Du willst "$1", nicht $1.

$@ ist auch falsch, denn der entfernt zunächst den Whitespace und klatscht das ganze dann wieder mit Leerzeichen zusammen. Das geht schief, sobald man Tabs oder mehrere Leerzeichen hintereinander im Parameter hat.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

wodim
Posts: 17
Joined: 01. Mar 2014 17:29
Location: Gilching

#17 Post by wodim »

Janka wrote:Fehler passieren mir doch auch dauernd und da bin ich froh, wenn mich jemand auf den Irrtum hinweist. Sonst bleibt der nämlich stehen und der nächste der es liest macht ihn nach.
Uff, dann isses ja gut. ;)
Ich mache jeden Tag Fehler. Wir müssen eine Kultur entwickeln, in der Fehler nicht als etwas Negatives gesehen werden, sondern als etwas, woraus alle lernen können.
(Aus einem Artikel in der "Süddeutschen", so vielleicht vor 10 Jahren, überschrieben: "Fehler im System") Etwas Mut muss man Herrn Professor schon zugestehen, mancher andere hätte da viel zuviel Angst vor der Gefahr eines "Karriereknicks", würde ich sagen.

http://www.swtr.ch/index.php/de/der-swi ... r&catid=39

Also schau' doch mal, was sich da jetzt als wahrscheinlichste Ursache für das ganze Problem herauskristallisiert. (Will nicht dauernd hin- und herkopieren - wozu gibt's Links? Richtig, zum Anklicken.) :wink:

http://debianforum.de/forum/viewtopic.p ... 74#p979085
Mit einem Computer kann man Probleme lösen, die man ohne ihn nicht hätte.

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#18 Post by Janka »

wodim wrote:Etwas Mut muss man Herrn Professor schon zugestehen, mancher andere hätte da viel zuviel Angst vor der Gefahr eines "Karriereknicks", würde ich sagen.

http://www.swtr.ch/index.php/de/der-swi ... r&catid=39
War mir dunkel bekannt. Medizin ist aber auch wirklich furchtbar. Da für Mediziner der Doktorgrad praktisch obgligatorisch ist, steht es um die Qualität der abgelieferten Arbeiten nicht gut, zumal die wenigsten wirklich wissenschaftlich arbeiten wollen. Die wollen einfach kranken Menschen helfen (und 'nen dicken Wagen zum Golfplatz rollen lassen). Um die ganzen "Studien", die ständig zu den abstrustesten Gesundheitsthemen rauskommen geht's da ja noch nichtmal.

Aber ganz generell zum Thema Cargo-Kult in der Wissenschaft kontere ich mit http://dresdencodak.com/2011/04/19/dark-science-09/. Ist inzwischen also schon Popkultur geworden.
Also schau' doch mal, was sich da jetzt als wahrscheinlichste Ursache für das ganze Problem herauskristallisiert. (Will nicht dauernd hin- und herkopieren - wozu gibt's Links? Richtig, zum Anklicken.) :wink:

http://debianforum.de/forum/viewtopic.p ... 74#p979085
Tut mir leid, aber anhand jenes Threads sehe ich das konkrete Problem nicht. Dass es um korrektes Quoting geht hatten wir schon.

Wenn du in einem Shellskript irgendwo Einzelticks setzt, wird der String in den Einzelticks "literal" angenommen, also Variablen nicht aufgelöst. Wenn das in einem deiner Beispiele - wie oben mit gedit - nicht der Fall ist, benutzt du an der Stelle wo diese Quotes beachtet werden keine Bourne-kompatible Shell. Deshalb ist es ja auch so wichtig, die richtigen Quotes zu benutzen. Die Backslashes aus den MS-Windows-kompatiblen Dateipfaden können auch noch stören, wenn sie nicht richtig maskiert worden sind. Das ist alles ziemlich häßlich.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

wodim
Posts: 17
Joined: 01. Mar 2014 17:29
Location: Gilching

#19 Post by wodim »

Janka wrote:
wodim wrote:Etwas Mut muss man Herrn Professor schon zugestehen, mancher andere hätte da viel zuviel Angst vor der Gefahr eines "Karriereknicks", würde ich sagen.

http://www.swtr.ch/index.php/de/der-swi ... r&catid=39
War mir dunkel bekannt. Medizin ist aber auch wirklich furchtbar. Da für Mediziner der Doktorgrad praktisch obgligatorisch ist, steht es um die Qualität der abgelieferten Arbeiten nicht gut, zumal die wenigsten wirklich wissenschaftlich arbeiten wollen. Die wollen einfach kranken Menschen helfen (und 'nen dicken Wagen zum Golfplatz rollen lassen).
Oh, da gibt's solche und solche. :wink: Ich musste manchen Arzt schlecht behandeln, um die zu finden, die mich richtig behandeln. :wink: Bis auf einen: Meinen Zahnarzt. Bei dem bin ich schon ewig, der ist einfach Spitze, und der hat bis heute keinen Doktortitel. Was er aber allein mit meinen Beißerchen schon angestellt hat, ist echt reif für eine Doktorarbeit. (Wurzelbehandlung unter einer Brücke u.ä. - hat die Welt schon sowas gesehen?) Ich hab' ihn mal auf das Thema "Doktorarbeit" angesprochen: "Die ruht!"

http://www.zahnarzt-bauer.de/

Seit einem Jahr ist die Hälfte meines Gebisses "neu", und ich habe keinen Cent zugezahlt. Kaum zu glauben? Aber wahr!

Das ist ein Thema, über das es sich lohnt, zu diskutieren, und ich kann eine Menge Erfahrungen mit Ärzten und Krankenkassen weitergeben, von denen alle profitieren können. Passt aber wohl absolut nicht hierher. :wink:
Janka wrote:Wenn du in einem Shellskript irgendwo Einzelticks setzt, wird der String in den Einzelticks "literal" angenommen, also Variablen nicht aufgelöst. Wenn das in einem deiner Beispiele - wie oben mit gedit - nicht der Fall ist, benutzt du an der Stelle wo diese Quotes beachtet werden keine Bourne-kompatible Shell. Deshalb ist es ja auch so wichtig, die richtigen Quotes zu benutzen. Die Backslashes aus den MS-Windows-kompatiblen Dateipfaden können auch noch stören, wenn sie nicht richtig maskiert worden sind.
Das versuche ich zu verstehen. Schrittweise. Learning by doing. :wink:
Janka wrote:Das ist alles ziemlich häßlich.
Wieso hässlich?
Mit einem Computer kann man Probleme lösen, die man ohne ihn nicht hätte.

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#20 Post by Janka »

wodim wrote:
Janka wrote:Das ist alles ziemlich häßlich.
Wieso hässlich?
Wenn du die richtige Lösung für dein konkretes Quotingproblem gefunden hast wirst du mir zustimmen.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

wodim
Posts: 17
Joined: 01. Mar 2014 17:29
Location: Gilching

#21 Post by wodim »

Aaalso so heißt meine übergebene Datei (und so gibt's mir auch "echo $@ >&2" aus:

Code: Select all

/mnt/data/Geraete/HiFiRack/pre/AmpLog/test blank.asc
Das macht mein Script draus (und so gibt's mir auch "echo $winpath >&2" aus):

Code: Select all

D:\\Geraete\\HiFiRack\\pre\\AmpLog\\test\ blank.asc
Im Terminal funzt das:

Code: Select all

wine 'C:\Program Files\LTC\LTspiceIV\scad3.exe' D:\\Geraete\\HiFiRack\\pre\\AmpLog\\test\ blank.asc
-> LTSpice startet und öffnet die Datei.

Aus dem Script nicht:

Code: Select all

wine 'C:\Program Files\LTC\LTspiceIV\scad3.exe' $winpath
Da sagt mir LTSpice:
D:\\Geraete\\HiFiRack\\pre\\AmpLog\\test\ was not found
Also nächster Versuch:

Code: Select all

wine 'C:\Program Files\LTC\LTspiceIV\scad3.exe' '$winpath'
Message von LTSpice:
$winpath was not found
Last edited by wodim on 04. Mar 2014 21:00, edited 2 times in total.
Mit einem Computer kann man Probleme lösen, die man ohne ihn nicht hätte.

wodim
Posts: 17
Joined: 01. Mar 2014 17:29
Location: Gilching

#22 Post by wodim »

Code: Select all

winpath=${@//'/mnt/data'/'D:'} 					# /mnt/data ist Wine - Laufwerk D
winpath=${winpath//'/'/'\\'}   					# Slashs durch doppelte Backslash ersetzen
winpath=${winpath//' '/'\ '}   					# Blanks mit Backslashs maskieren
wine 'C:\Program Files\LTC\LTspiceIV\scad3.exe' "$winpath"
Message von LTSpice:
D::\Geraete\HiFiRack\pre\AmpLog\test\ blank.asc contains an invalid path.
Also was war der Fehler? Blanks mit Backslash zu "maskieren". Wenn ich den Befehl weglasse, geht's! Aber nur bei Wine. ;)

Code: Select all

file=${@//' '/'\ '} # Blanks mit Backslashs maskieren
gedit "$file"
Das funzt. Gab's irgendwelche Probleme? :wink: Also was heißt hier "hässlich"? :wink:
Last edited by wodim on 04. Mar 2014 21:29, edited 1 time in total.
Mit einem Computer kann man Probleme lösen, die man ohne ihn nicht hätte.

wodim
Posts: 17
Joined: 01. Mar 2014 17:29
Location: Gilching

#23 Post by wodim »

Janka wrote:
wodim wrote:
Janka wrote:Das ist alles ziemlich häßlich.
Wieso hässlich?
Wenn du die richtige Lösung für dein konkretes Quotingproblem gefunden hast wirst du mir zustimmen.

Janka
Nö. Weißt du, das ist wie mit (u.a.) eben diesem Gerät (auf das meine Pfad- und Dateinamen ja schon hindeuten). :wink:

http://www.elektor.de/forum/foren-ubers ... geStart=11

Das kann man nicht beschreiben, das muss man erlebt haben: Alles "Hässliche" (Mühe, Ärger, ... ) ist vergessen in dem Moment, wo dich so ein Drahtverhau zum ersten Mal mit einer klaren Stimme anspricht.

Seit ein paar Wochen halt u.a. auch eine super Übung, um mich nach der bewährten Methode "learning by doing" in LTSpice 'reinzufummeln. Das ich für mein "richtiges" Projekt auch brauche (gegen das wiederum diese Bastelei immer noch kalter Kaffee ist). Bitte mal informieren!

http://www.politik-sind-wir.de/showthre ... post106357
Mit einem Computer kann man Probleme lösen, die man ohne ihn nicht hätte.

Post Reply