Shell verificando o privilégio do usuário da variável multilinha

Shell verificando o privilégio do usuário da variável multilinha

Estou tentando escrever um script que, em algum momento, precise verificar os privilégios de usuário de várias pastas. Os caminhos são armazenados em uma variável, cada caminho em uma nova linha.

Até agora eu tenho isso:

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 

A saída contém vários caminhos, no meu caso o conteúdo da minha $PATHvariável.

Com a primeira linha tento converter a variável multilinha em um array e depois iterar sobre todos os elementos do array.

Quando executo o código ele só funciona para a primeira entrada, a echo "$i"única exibida /binantes de sair do loop.

Então, acho que não converti a variável multilinha em um array.

Responder1

Substituir:

    for i in "$arr"

com:

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

$arrrefere-se apenas ao primeiro elemento de uma matriz. {$arr[@]}se expandirá para todos os elementos, cada um como uma palavra separada.

Além disso, se você tiver o bash 4.0 ou mais recente, o seguinte poderá ser criado arrem uma única etapa:

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

informação relacionada