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.


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.


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

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.