
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 $PATH
variá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 /bin
antes 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[@]}"
$arr
refere-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 arr
em uma única etapa:
mapfile -t arr <<<"${PATH//:/$'\n'}"