Shell Verificando o privilégio de usuário da variável de várias linhas

1

Estou tentando escrever um script que, em algum momento, precisa 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 variável $PATH .

Com a primeira linha eu tento converter a variável multi line em um array e depois iterar sobre todos os elementos da matriz.

Quando executo o código, ele só funciona para a primeira entrada, o echo "$i" exibe apenas /bin antes de sair do loop.

Então, acho que não converti a variável de várias linhas em uma matriz.

    
por NIoSaT 16.10.2016 / 23:31

1 resposta

1

Substituir:

    for i in "$arr"

com:

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

$arr refere-se apenas ao primeiro elemento de uma matriz. {$arr[@]} 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 pode criar arr em uma etapa:

mapfile -t arr <<<"${PATH//:/$'\n'}"
    
por 17.10.2016 / 00:10