O comando read
está acontecendo em um pipeline - ele está dentro do while
loop, que tem sua entrada redirecionada da saída do comando find
- assim, quando ele lê, ele está lendo a partir da lista de arquivos find
gerados, em vez do terminal. A maneira mais simples que eu sei para consertar isso é enviar a lista de arquivos através de algo diferente da entrada padrão, então a entrada padrão ainda pode ser usada para outras coisas (como a confirmação do usuário). Contanto que você não esteja usando o descritor de arquivo nº 3 para outra coisa, isso deve funcionar:
# ...
while IFS= read -r -u3 -d '' FILE; do
# same inside of the loop...
done 3< <(find /etc/init.d/* -name '*service' -print0)
O -u3
informa read
a ler do FD3 e o 3< <(find...)
redireciona o FD3 da saída do comando find
. Observe que o <( )
(conhecido como substituição de processo) é uma extensão bash (não disponível em shells posix simples), portanto, você deve usá-lo somente em scripts que inicie com #!/bin/bash
(não #!/bin/sh
).