J’utilise pushd plutôt que cd. À la longue ça s’allonge avec beaucoup de doublons.
mes aliases les plus utilisés pour cet usage:
Pour choisir dans la liste: alias pu='dirs -v && read -p ">" && echo $REPLY && let n=$REPLY+0 2>/dev/null && pushd +$REPLY || pushd $REPLY'
Pour faire un «cd» en l’ajoutant dans la pile: alias pu+='dirs -v ; pushd'
Mais c’est surtout pour entraîner mes neurones avec une fonction bash…
Disposer d’une commande (une fonction dans ~/.bash_function) pour supprimer les doublons dans l’affichage de la pile des répertoires par la commande dirs, afin d’afficher une liste plus courte de répertoires.
Difficulté avec les guillemets et les apostrophes dans la définition de l’alias.
$1 et $2 dans awk sont vides, avec tous les essais entre ", ’ et " et ’ (4 possibilités).
Peut-être qu’une fonction sera plus simple et plus sure.
Pour awk, $1 désigne le champ 1, $2 le champ 2… et -F indique le séparateur, en l’occurrence l’espace ici. Awk n’est pas du bash, c’est un véritable langage mais ce serait se compliquer la vie que de s’en priver. L’un de ses auteurs est l’un des deux auteurs du langage C. Avec grep, sed, awk, sort et uniq, vous devriez arriver à résoudre la plupart des problèmes du même style.
La documentation d’Awk devrait vous plaire, elle est cependant en anglais et comporte pas moins de 611 pages dans sa version PDF: https://www.gnu.org/software/gawk/manual/. Dès que vous avez un tableau ou il y a des colonnes à inverser, awk doit être un réflexe au moins pour des essais. Il a cependant un défaut car il est lent par rapport à de la programmation en C ou C++ mais cela ne devrait pas poser de problème avec un volume de données relativement faible à traiter.
merci VBreton,
ça ne me dit pas pourquoi, c’est efficace en direct sur la ligne de commande, et pas dans un alias: $dirs -v | awk -F ' ' '{ print $2," ",$1 }' | sort -u : ne se plaint pas
$alias popdirs="dirs -v | awk -F ' ' '{ print $2, ,$1 }' | sort -u"
$popdirs
awk: ligne de commande:1: { print , , }
awk: ligne de commande:1: ^ syntax error
$alias popdirs="dirs -v | awk -F ' ' '{ print $2,\" \ ",$1 }' | sort -u"
$popdirs
awk: ligne de commande:1: { print ," ", }
awk: ligne de commande:1: ^ syntax error
(Problème d’affichage du code: les guillemets qui encadrent l’espace, dans le bloc awk, sont échappés ’ ’ ‹ { print $2,\" \ ",$1 } ›, les espaces sont respectés (1 entre les apostrophes de -F, et un entre les guillements échappés de awk
# 1 effacer la variable tableau DIRSTACK
unset DIRSTACK
# 2 mettre la sortie de
# dirs -p | sort -u
# dans DIRSTACK
DIRSTACK=( $(dirs -p | sort -u) )
Mais (testées directement en ligne de commande) si unset DIRSTACK vide bien la variable DIRSTACK, les commandes pushd, dirs et popd en utilise manifestement une autre, elles ne sont pas affectées par l’effacement de DIRSTACK.