2016-06-04 9 views
0

Ich habe eine Konfigurationsdatei, die Pfad zu einigen Dateien enthält.Config-Datei lesen mit Shell-Skript

path.conf Datei

path =/home/work_group/Desktop/rt.txt

path =/home/test/

.... ....

path =/home/work_group/Dokumente/offdoc/

In einem Skript möchte ich alle diese Dateipfad lesen und Berechtigungen für sie festlegen. Ich habe den folgenden Code versucht, aber es wird nicht einmal den Pfadnamen gedruckt.

#!/bin/bash 
while IFS= read -r line || [[ -n "$path" ]]; do 
if [ -n "$path" ] 
then 
echo "Text read from file: $path" 
chmod 0750 $path 

fi 
path= 
done < admin.cfg 

kann mir jemand helfen, einen Skript zu schreiben, die die Dateipfade alle in der Konfigurationsdatei erwähnt nimmt und setzten ihre Berechtigungen 0750.

+0

Bitte die Frage richtig einrücken. Sehen Sie auch, was macht [\ [mcve \]] (http://stackoverflow.com/help/mcve). – sjsam

+0

Was auch immer Sie versuchen zu erreichen, ** chmod 777 ist falsch ** und ein Sicherheitsproblem. Warum möchten Sie Benutzern mit Zugriff auf das System erlauben, in diese Dateien zu schreiben? Verstehen Sie das Konzept von [privileg eskalation?] (Https://en.wikipedia.org/wiki/Privilege_escalation) – tripleee

+0

Sie lesen Daten in 'line' und untersuchen dann eine andere Variable namens' path'. Voting zum Schließen als trivialer Fehler. – tripleee

Antwort

1

Hier ist ein kurzer Einzeiler, dass die Arbeit erledigt wird erhalten für Sie:

for i in $(awk -F'=' '{print $2}' path.conf | xargs); do chmod 0750 $i; done

die $() läuft awk in einer Subshell und gibt die Dateinamen. xargs sammelt sie in einer Zeile, so dass die for-Schleife über sie iterieren kann.

Es sollte einfach sein, dies selbst in ein Skript zu verwandeln.

Update: Tripleee hat auf den Fehler in Ihrem Versuch hingewiesen, sollten Sie seinen Rat befolgen. Ehrlich gesagt las ich nur die erste Zeile, entschied, dass es keinen Sinn ergab und schrieb stattdessen diese Antwort.