Quoting in Shell-Scripts

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Quoting in Shell-Scripts
Hi,

folgendes Szenario: Ein Shell-Script bekommt durch ein bestimmte Kommandos an den Dateinamen einer gewuenschten Datei und moechte diesen nun an ein Programm zur Ausfuehrung weitergeben.
Das Problem dabei ist, dass der Dateiname z. B. Leerzeichen enthaelt und dann natuerlich das aufgerufene Programm meckert, dass die Datei mit dem abgeschnittenen Namen nicht existiert. Wie bringe ich die Shell dazu, das zu quoten, wie sie es im interaktiven Modus auch macht? Oder hat jemand eine Alternatividee?

Gruesse und Danke,
-Steppenwolf


“” bzw ‘’ im Skript verwenden und diese ggfs escapen. Funktioniert aber leider auch nicht in jedem Fall.


Sowas vielleicht?
… |sed -r “s: :\ :” |xargs …


Danke fuer die Hinweise,

aber das Ultimative ist es noch nicht. Komischerweise funktioniert folgendes Shell-Skript nicht:

FILE=`ls bla/ | head -n 1 | sed -e 's/ /\\ /g'`
mv FILE neuername

Die Shell meckert dann beim sed - ich nehme an, dass es was mit dem Quoting zu tun hat, weil wenn ich das Konstrukt so ausfuehre, dann geht es, bloss in Kombination mit den Backticks und der Variablenzuweisung geht das nicht. Weiss jemand, warum nicht?

Von der Funktionalitaet will ich also ungefaehr sowas hinbringen. Ich bin immer noch fuer Alternativen offen :). Laesst sich z. B. ueber xargs da etwas machen? Das Problem ist bloss, dass ich in diesem Beispiel mv nach FILE noch ein weiteres Argument uebergeben will - geht das?


Ohne mir jetzt das konkrete da genauer anzuschauen, kann ich dir ja vllt mit dem xargs einen Tipp geben. Häng doch einfach mit cat dein letztes Argument dran, bevor du dann die Argumentliste mit xargs übergibst :).


Hey, nice idea!

Probiere ich spaeter mal aus, sollte aber wohl auch in dem Fall funktionieren, ja!


So, jetzt geht alles.

Habe nebenbei noch herausgefunden, dass ls automatisch sortiert und mit -b escapt! Also dafuer nicht mal sed noetig. Allerdings habe ich sed zum Anhaengen des 2. Arguments benutzt - ich weiss nicht, wie du das mit cat machen willst.


Also in der Zeile mit dem mv müsste auf jeden Fall $FILE statt FILE stehen. Ansonsten würde mir jetzt sowas einfallen:

FILE=`ls bla/ |head -n 1`
mv "$FILE" neuername

Hab letztens erst ein Skript geschrieben, das in dieser Weise mit Dateien arbeitet, und hatte keine Probleme beim Pipen in Backticks feststellen können. Auch head und ls und so Zeug kam dadrin vor. Ich häng’s dir mal hier an:

Attachment:
kau.sh: https://fsi.cs.fau.de/unb-attachments/post_25603/kau.sh