
Estoy intentando escribir un script que, en algún momento, necesita verificar los privilegios de usuario de varias carpetas. Las rutas se almacenan en una variable, cada ruta en una nueva línea.
Hasta ahora tengo esto:
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 salida contiene varias rutas, en mi caso el contenido de mi $PATH
variable.
Con la primera línea intento convertir la variable de varias líneas en una matriz y luego iterar sobre todos los elementos de la matriz.
Cuando ejecuto el código, solo funciona para la primera entrada, echo "$i"
solo se muestra /bin
antes de salir del ciclo.
Entonces supongo que no convertí la variable de varias líneas en una matriz.
Respuesta1
Reemplazar:
for i in "$arr"
con:
for i in "${arr[@]}"
$arr
se refiere solo al primer elemento de una matriz. {$arr[@]}
se expandirá a todos los elementos, cada uno como una palabra separada.
Además, si tiene bash 4.0 o posterior, puede crear lo siguiente arr
en un solo paso:
mapfile -t arr <<<"${PATH//:/$'\n'}"