comment supprimer (par une fonction bash ou un script) les doublons du tableau DIRSTACK ?
Je n’ai pas trouvé comment le faire en utilisant que les tableaux.
Ma fonction est encore fausse, en passant par un fichier.temporaire:
# # Supprimer les doublons de la pile des répertoires DIRSTACK (dirs -p, dirs -v, popd, pushd)
popdirs() {
# Afficher la dimension de la pile:
BIG=$(dirs -p | wc -l) ; echo "BIG=$BIG"
# Afficher le dimension sans les doublons:
SMALL=$(dirs -p | sort -u | wc -l) ; echo "SMALL=$SMALL"
# 1 Créer la liste réduite:
dirs -p | sort -u >| DIRS.tmp
# 2 Supprimer la liste actuelle trop longue:
OLDDIRSTACK="${DIRSTACK[@]}"
unset DIRSTACK || echo "Erreur 2"
#3 Reconstruire DIRSTACK:
echo "Reconstruire DIRSTACK:"
for i in $(cat DIRS.tmp)
do
echo "Lecture du fichier DIRS.tmp"
DIRSTACK=( "{DIRSTACK[@]}" "$i" )
done
##################
echo "Fait"
# contrôle:
for i in "${!DIRSTACK[@]}
do
echo "Indice=$i, Valeur=${DIRSTACK[$i]}"
done
echo "Controlé ?"
#################
#4 vérifier: afficher avec dirs -n
echo "Afficher la liste triée:"
dirs -v | sort
echo " Afficher la dimension de la pile:"
dirs -p | wc -l
DIRSDIM="$(dirs -p | wc -l)"
# Si le résultat est bon, unset OLDDIRSTACK:
if [[ "$DIRSDIM" -eq "$SMALL" ]]
then
echo OK
# Tester avant de valider
return 99
echo "TODO unset OLDDIRSTACK"
#Supprimer le fichier DIRS.tmp
rm DIRS.tmp
elif [[ "$DIRSDIM" -eq "$BIG" ]]
then
echo "Pile inchangée..."
elif [[ "$DIRSDIM" -eq 0 ]]
then
echo "Pile vidée"
else
echo "Pile de dimension anormale"
fi
}