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 $PATH
variable.
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 /bin
avant de quitter la boucle.
Donc, je suppose que je n’ai pas converti la variable multiligne en un tableau.
bash
shell-script
privileges
NIoSaT
la source
la source
Réponses:
Remplacer:
avec:
$arr
fait 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
arr
en une seule étape:la source
mapfile
nécessite bash 4.0 (circa 2009) ou mieux. Mac OSX utilise la version 3.2 de Bash datant de 2006.