Você pode usar xargs
para transformar STDIN
(mesmo com muitas entradas, muito maiores que o buffer de linha de comando) para argumentos .
Ou então, algo como:
if [ $# -gt 0 ] ;then
for filename in "$@" ; do
process_file "$filename"
done
else
IFS=$'\n' read -d '' -r -a filenames
for filename in "${filenames[@]}"; do
process_file "$filename"
done
fi
ou ambos:
IFS=$'\n' read -d '' -r -a filenames
for filename in "${filenames[@]}" "$@" ; do
process_file "$filename"
done
fi
ou adicionando tal opção , como -l
representam apenas argumentos de linha , para garantir que não haja leitura (espera) de STDIN
:
case "$1" in
-l )
shift
for filename in "$@" ; do
process_file "$filename"
done
;;
* )
for filename in "${filenames[@]}" "$@" ; do
process_file "$filename"
done
;;
esac
(não testado!)