Shell Comprobación de privilegios de usuario de variables de varias líneas

Shell Comprobación de privilegios de usuario de variables de varias líneas

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 $PATHvariable.

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 /binantes 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[@]}"

$arrse 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 arren un solo paso:

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

información relacionada