J'essaie d'écrire une fonction bash simple qui prend, comme arguments, un certain nombre de fichiers et / ou de répertoires. Cela devrait:
- Qualifiez entièrement les noms de fichiers.
- Triez-les.
- Supprimez les doublons.
- Imprimez tout ce qui existe réellement.
- Renvoie le nombre de fichiers inexistants.
J'ai un script qui fait presque ce que je veux, mais tombe sur le tri. La valeur de retour du script tel qu'il est est correcte, mais la sortie ne l'est pas (non triée et en double). Si je décommente l' | sort -u
instruction comme indiqué, la sortie est correcte mais la valeur de retour est toujours 0
.
NB Des solutions plus simples pour résoudre le problème sont les bienvenues mais la question est vraiment de savoir pourquoi cela se produit dans le code que j'ai. C'est-à-dire, pourquoi l'ajout du tuyau semble-t-il arrêter le script d'incrémenter la variable r
?
Voici le 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 "$@"
àfor arg
. "Si 'en MOTS ...;' n'est pas présent, alors 'in "$ @"' est supposé. " - aide pour