Gleicher Befehl über Script -> Fehler?

F

FeaR

Grünschnabel
Hallo,

mein Name ist Michael und ich bin als zukünftiger Admin in die IT-Branche gekommen ;) Aktuell bin ich noch in der Startphase und beim erlernen der Praxis, nachdem ich meine Ausbildung im Sommer letzten Jahres abgeschlossen habe. Bei der neuen Firma habe ich jetzt auch das erste mal richtig viel Kontakt mit Linux/Ubuntu/Sles. Dabei bin ich nun auch vermehrt auf dieses Forum gestossen und wollte mir nun selbst Hilfe zu meinem konkreten Problem holen.

Nun aber zum wesentlichen Inhalt/Grund des Threads ;)
Ich habe ein grosses Problem. Ich bin ziemlich neu mit Ubuntu / Linux unterwegs und versuche mich an diversen Scripten um hier in der Firma Sachen zu beschleunigen.

Mein aktuelles Script soll mir einfach einen ls -l von einzelnen Dateien ausgeben und in eine .txt schreiben.

Das Skript ist recht simpel aufgebaut, warscheinlich gäbe es da wesentlich schnellere oder einfachere Wege, aber ich wills ja lernen und nicht was vorgekautes probieren.

Hier erstmal mein Script:

#!/bin/bash

Laenge="4" #hier Zeilen der Txt eintragen
Zeile="1"

while [ $Zeile -lt $Laenge ] ; do #ok

Pfad="`sed -ne "$Zeile p" test.txt`"

Zeile=$[$Zeile+1] #ok

lsinfo=`ls -l "$Pfad"`
echo "$lsinfo" #ok

lsinfo2="ls -l "$Pfad""
echo "$lsinfo2"

#ls -lh $lsinfo >> hallo.txt

done

Das Problem ist, wenn Leerzeichen innerhalb des Dateinamens oder Pfades vorhanden sind, macht das Skript Ärger.

Die aktuelle Ausgabe mit 3 Testdateien ist folgende:

-rw-r--r-- 1 michael michael 3215350 2010-06-15 15:48 /home/michael/Downloads/nagios-3.2.1.tar.gz
ls -l /home/michael/Downloads/nagios-3.2.1.tar.gz

-rw-r--r-- 1 root root 0 2010-08-06 09:45 /home/michael/Downloads/wtf?.txt
ls -l /home/michael/Downloads/wtf?.txt

ls: Zugriff auf /home/michael/Downloads/Hallo\ Leerzeichen.txt nicht möglich: No such file or directory
ls -l /home/michael/Downloads/Hallo\ Leerzeichen.txt



Das kuriose ist, wenn ich den ls -l am Ende einfach kopiere und selbst ausführe, klappt alles Problemlos und mir werden die Daten der Datei Hallo Leerzeichen ausgegeben. Das Skript gibt aber diesen Fehler aus.

Habt ihr da irgendeine Idee die mir weiter helfen könnte?

Danke euch.

bye
 
Nehm den Backslash aus dem Dateinamen in der Inputdatei.
Ich denke, dann kommst du selbst drauf, was der Fehler war.
Sonst meldest du dich nochmal.
 
Hallo

NoXqs hat recht. Also entweder lässt du den Backslash im Input weg. Der Backslash würde zwar das Leerzeichen escapen aber die double Quotings (") verhindern dies. Darum funktioniert es mit Backslash auf der Konsole.

Oder du lässt den Backslash in der Inputdatei und lässt die ganzen vielen verwirrenden Quotings weg:
Pfad=$(sed -ne "$Zeile p" test.txt)
lsinfo=$(ls -l $Pfad)
echo $lsinfo
lsinfo2=$(ls -l $Pfad)
echo $lsinfo2

MFG
 
Hallo zusammen ;)

Ich war leider ein paar Tage verhindert, daher jetzt erst meine Antwort. Also ich bin durch den Hinweis von NoXqs dann selbst drauf gekommen, vielen Dank dafür. Da war ich wohl einfach blind gegenüber dem Fehler bzw. habe nur im Script gesucht und eine richtige Inputdatei vorausgesetzt.

An der Inputdatei kann ich nix ändern, die ist so vorhanden und hat diverse Einträge, deswegen fällt das leider flach. Ist aber ja auch egal, das Script klappt soweit bei mir.

Dankeschön euch für die Hilfe

bye
 
Noch ein Tip zu Deinem Skript: In einem Skript solltest Du fuer Befehle moeglichst den ganzen Pfad benutzen, also z.B. /bin/ls. Gerade ls ist oft ein alias, und Deine Textdatei wird ziemlich unleserlich aussehen, wenn ein alias auf 'ls --color' die ganzen Kontrollzeichen mitumleitet, die die schoenen Farben in der Konsole erzeugen. Und wenn rm ein alias auf 'rm -i' ist und Du das Skript unbeaufsichtigt ausfuehren moechtest, koennte es stecken bleiben.
 
Ok danke für den Hinweis ;)

Wir nutzen zwar aktuell nur Server wo keinerlei Aliase gesetzt wurden, aber ich werde das bei meinem nächsten Script mal versuchen. Hier ging es nur um eine schnelle Fehleranalyse. Ist ja auch im Sinne der Portierbarkeit dann sinnvoll.

bye
 

Ähnliche Themen

verzeichniss suche funktioniert nicht

Finde Fehler im Code nicht

Nach editieren auf Linux Server läuft Ubuntu-Script nichtmehr?

Löschroutine mit Überprüfung

Prozess aus eigenem Init script wird gekillt

Zurück
Oben