Primeiro, não, você não pode enviar uma atribuição como FILES=blah
para outro processo, já que as variáveis são internas ao shell e, enquanto as variáveis exportadas se propagam para baixo para os filhos, não há nenhum método para propagá-las para cima para os pais e antepassados de um processo.
Você pode, no entanto, executar um comando externo e selecionar sua saída em uma matriz. Embora não seja tão seguro quanto a caracteres especiais em nomes de arquivos como o shell glob, uma vez que o bash não parece gostar de '
como um separador. Se você não tiver arquivos com novas linhas, isso deve funcionar: stat
'
IFS=$'\n' # only split on newlines
FILES=( $(find ...) ) # or
FILES=( $(sudo find ...) )
No entanto, se você produziu a lista de arquivos com privilégios elevados, talvez não seja possível acessar os arquivos na lista depois disso. Por exemplo, se eles estivessem em um diretório ao qual o usuário não tem acesso, mesmo um sudo
neles não funcionaria.
E, em qualquer caso, para fazer isso com segurança, você precisa ter um conjunto limitado muito de comandos permitidos em sudo find
(para o usuário que está executando o script). Caso contrário, não há nada que impeça alguém de alterar o sudo find -delete
para %code% ou pior.