Ne pas afficher la pile pushd / popd sur plusieurs scripts bash (pushd / popd silencieux)

94

Chaque fois que j'utilise pushd ou popd, il imprime la pile sur la sortie standard. Comment ne pas le faire?

Je ne veux pas le faire à pushd > /dev/nullchaque fois parce que j'ai beaucoup de scripts qui s'appellent.

Peut-être qu'un bon remplacement le fera, mais je devrai remplacer ces composants intégrés uniquement dans mes scripts, puis restaurer le comportement correct.

bemug
la source
2
Si quelqu'un est tombé sur cette question en voulant faire taire une seule occurrence, vous pouvez remplacer pushdet popdpar cdet cd ~-. ~-est une extension de tilde définie sur $ OLDPWD .
Agustín Lado
@ AgustínLado cd -fonctionne également. Je ne sais pas quelle version est la plus compatible avec une large gamme de systèmes.
Shiplu Mokaddim le
1
@ShipluMokaddim: Sans tilde, il imprime le nom du dossier (au moins sur Ubuntu 18.04 fonctionnant sur WSL).
astraujums
Si vous avez une séquence de commandes entre a cd some/pathet a cd -ou cd "${return_wd}"ou quelque chose de similaire, envisagez de regrouper les commandes intermédiaires dans une fonction et utilisez un sous-shell comme (cd some/path; your_commands_here). La navigation dans le répertoire vers l'ancien PWD est implicite à la fin du sous-shell. Fonctionne également pour les substitutions de commandes.
user4642212

Réponses:

134

Vous pourriez ajouter

pushd () {
    command pushd "$@" > /dev/null
}

popd () {
    command popd "$@" > /dev/null
}

en haut de chaque script. C'est probablement la quantité minimale de travail nécessaire pour résoudre votre problème.

chepner
la source
Exactement ce dont j'avais besoin ... Merci!
RonzyFonzy
Si vous souhaitez également supprimer les erreurs (par exemple, aucun répertoire de ce type), vous pouvez utiliser à la &>place de>
MattSturgeon
4
Soyez prudent lorsque vous désactivez les erreurs: vous pourriez créer un échec difficile à diagnostiquer à une date ultérieure. Assurez-vous de vérifier un code de retour non-OK et répondez-y en conséquence.
David Spillett
1
@ xdevs23 || exit $?équivaut à just || exit. Pareil pour return.
user4642212
1
@bmacnaughton Il n'a aucun argument requis ; il accepte -net toute une famille d' arguments -Net +N(pour un entier N).
chepner le
3

Dans votre fichier .profile (quel que soit son nom dans votre système), ajoutez:

pushd () {
    command pushd "$@" > /dev/null
}

popd () {
    command popd "$@" > /dev/null
}

export pushd popd
Bozon
la source
13
Cela affecte tout le système ... personnellement, je ne recommande pas cette façon. .
Sean83
3

Dans zsh, vous pouvez setopt PUSHDSILENT. Mettez ceci dans votre ~/.zshrc.

Michael Deardeuff
la source
1
Ou utilisez popd -q(calme).
rxw
5
popd n'a pas d' -qoption
MarekN
2
@MarekN: le commentaire précédent de "popd -q" faisait référence à zsh, pas à bash, même si la question d'origine était étiquetée comme voulant des réponses bash, pas zsh.
b-jazz
C'est un bon commentaire ou une tangente à une réponse, mais cela n'appartient pas à une réponse autonome à une question qui ne pose pas de question zsh.
chepner le