Shell überprüft Benutzerrechte für mehrzeilige Variablen

Shell überprüft Benutzerrechte für mehrzeilige Variablen

Ich versuche ein Skript zu schreiben, das irgendwann die Benutzerrechte mehrerer Ordner überprüfen muss. Die Pfade werden in einer Variablen gespeichert, jeder Pfad in einer neuen Zeile.

Bisher habe ich Folgendes:

output=$PATH
output=$(echo "$output" | tr ':' '\n' | sort )                                                                                                                                                         
arr=($(echo "$output"))                                                                                                                                                                                                           
for i in "$arr"                                                                                                                                                                                                                   
do                                                                                                                                                                                                                                
    echo "$i"                                                                                                                                                                                                                     
    if ! [[ -x $i ]]; then                                                                                                                                                                                                        
        echo "You are missing execute Permission on
        echo "$i"                                                                                                                                                                                  
    fi                                                                                                                                                                                                                            
done 

Die Ausgabe enthält mehrere Pfade, in meinem Fall den Inhalt meiner $PATHVariable.

Mit der ersten Zeile versuche ich die mehrzeilige Variable in ein Array umzuwandeln und anschließend über alle Array-Elemente zu iterieren.

Wenn ich den Code ausführe, funktioniert er nur für den ersten Eintrag, der echo "$i"nur /binvor dem Verlassen der Schleife angezeigt wird.

Ich nehme also an, dass ich die mehrzeilige Variable nicht in ein Array konvertiert habe.

Antwort1

Ersetzen:

    for i in "$arr"

mit:

    for i in "${arr[@]}"

$arrbezieht sich nur auf das erste Element eines Arrays. {$arr[@]}wird auf alle Elemente erweitert, jedes als separates Wort.

Wenn Sie über Bash 4.0 oder neuer verfügen, können Sie Folgendes außerdem arrin einem Schritt erstellen:

mapfile -t arr <<<"${PATH//:/$'\n'}"

verwandte Informationen