Shell vérifiant le privilège d'utilisateur de la variable multiligne

1

J'essaie d'écrire un script qui, à un moment donné, doit vérifier les privilèges d'utilisateur de plusieurs dossiers. Les chemins sont stockés dans une variable, chaque chemin dans une nouvelle ligne.

Jusqu'ici j'ai ceci:

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 

La sortie contient plusieurs chemins, dans mon cas le contenu de ma $PATHvariable.

Avec la première ligne, j'essaie de convertir la variable multiligne en un tableau, puis de l'itérer sur tous les éléments du tableau.

Lorsque je lance le code, il ne fonctionne que pour la première entrée, le echo "$i"seul s’affiche /binavant de quitter la boucle.

Donc, je suppose que je n’ai pas converti la variable multiligne en un tableau.

NIoSaT
la source
Ok j'ai édité mon post initial
NIoSaT

Réponses:

1

Remplacer:

    for i in "$arr"

avec:

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

$arrfait référence au premier élément d'un tableau. {$arr[@]}s'étendra à tous les éléments, chacun en tant que mot séparé.

De plus, si vous utilisez bash 4.0 ou une version plus récente, les éléments suivants peuvent créer arren une seule étape:

mapfile -t arr <<<"${PATH//:/$'\n'}"
John1024
la source
1
J'ai déjà essayé quelque chose avec mapfile, mais il semble que mapfile ne soit pas intégré à OS X 10.12. Je pense donc
qu'une
1
@NIoSaT Désolé pour ça. mapfilenécessite bash 4.0 (circa 2009) ou mieux. Mac OSX utilise la version 3.2 de Bash datant de 2006.
John1024
ouais OS X a des trucs démodés ...
NIoSaT