Bash-Skripting: Dateiinhalte in Array analysieren

Bash-Skripting: Dateiinhalte in Array analysieren

Grüße,

Ich schreibe ein einfaches Bash-Skript, das den Inhalt einer Datei in ein Array analysieren muss. Einträge in der Datei sind durch „Newline“ getrennt – die Datei würde also ungefähr so ​​aussehen:

path/to/file
path/to/other/file

Ich möchte den Inhalt analysieren und iterieren. Mein Code sieht derzeit so aus:

CONTENT=`cat /path/to/text/file.txt`
for PATH in $CONTENT
do
   echo $PATH
   chmod -R 440 $PATH
fi

Dieser Code funktioniert hervorragend mit einer Datei mit UNIX-Zeilenenden. Bei einer Windows-formatierten Textdatei gerät er jedoch kläglich ins Stocken. Die Anweisung „echo $PATH“ erzeugt den korrekten Pfad, aber der chmod schlägt fehl und gibt an, dass die Datei nicht existiert. Mein Problem ist, dass die Windows-Zeilenenden nicht abgeschnitten werden, also versucht er, einen Dateipfad mit chmod zu bearbeiten, der ein Zeilenumbruchzeichen enthält.

Ich muss dafür sorgen, dass das Ganze funktioniert, unabhängig davon, ob die Zieldatei mit Unix- oder Windows-Zeilenumbrüchen erstellt wurde – aber da ich noch relativ neu im Shell-Scripting bin, bin ich mir nicht ganz sicher, wie das geht.

Ich schätze Ihre Hilfe!

Antwort1

Klingt, als müssten Sie bei der Verarbeitung jeder Zeile nur den Wagenrücklauf entfernen. Der wirklich einfache Weg ist die Verwendung des dos2unixDienstprogramms, aber wenn Ihr System das nicht hat oder Sie es nicht bekommen können, können Sie ähnliche Dinge mit erreichen tr, z. B.:

echo $PATH | tr -d '\r'

Weitere Ideen, wie zum Beispiel die Verwendung von sed, finden Sie auf derWikipediaEintrag.

BEARBEITEN: Ich möchte darauf hinweisen, dass dies $PATHkein guter Variablenname ist, da er zweifellos von der Umgebung festgelegt wird und andere Programme von seinem Wert abhängen können. Sie sollten erwägen, ihn in etwas wie zu ändern $CUR_PATH.

Antwort2

Ich würde einfach die erste Zeile des Skripts ändern:

CONTENT=$(tr -d \\r < /path/to/text/file.txt)

verwandte Informationen