Eu estou tentando escrever uma função simples do bash que usa, como argumentos, vários arquivos e / ou diretórios. Deveria:
- Qualifique totalmente os nomes de arquivos.
- Classifique-os.
- Remova duplicatas.
- Imprima tudo o que realmente existe.
- Retorne o número de arquivos inexistentes.
Eu tenho um script que quase faz o que eu quero, mas cai na classificação. O valor de retorno do script como está está correto, mas a saída não é (não classificada e duplicada). Se eu descomentar a | sort -u
instrução conforme indicado, a saída está correta, mas o valor de retorno é sempre 0
.
NB Soluções mais simples para resolver o problema são bem-vindas, mas a questão é realmente sobre por que isso está ocorrendo no código que tenho. Ou seja, por que adicionar o pipe aparentemente interrompe o script que incrementa a variável r
?
Aqui está o script:
function uniqfile
{
local r=0
for arg in "$@"
do
readlink -e "$arg" || (( ++r ))
done #| sort -u ## remove that comment
return $r
}
for arg in "$@"
parafor arg
. "Se 'em PALAVRAS ...;' não está presente, então 'in "$ @"' é assumido. " - help for