No muestre la pila pushd / popd en varios scripts de bash (pushd / popd silencioso)

95

Cada vez que utilizo pushd o popd, imprime la pila en la salida estándar. ¿Cómo no hacerlo?

No quiero hacer pushd > /dev/null cada vez porque tengo muchos guiones llamándose entre sí.

Tal vez una buena anulación lo haga, pero necesitaré anular estas incorporaciones solo en mis scripts y luego restaurar el comportamiento correcto.

engañar
fuente
2
Si alguien se encontró con esta pregunta y deseaba silenciar una sola ocurrencia, puede reemplazar pushdy popdcon cdy cd ~-. ~-es una expansión de tilde que se establece en $ OLDPWD .
Agustín Lado
@ AgustínLado cd -también trabaja. No estoy seguro de qué versión es más compatible con una amplia gama de sistemas.
Shiplu Mokaddim
1
@ShipluMokaddim: Sin tilde, imprime el nombre de la carpeta (al menos en Ubuntu 18.04 que se ejecuta en WSL).
Astraujums
Si usted tiene una secuencia de comandos entre una cd some/pathy una cd -o cd "${return_wd}"o algo similar, tenga en cuenta la agrupación de los comandos en el medio en una función y utilizar un subnivel como (cd some/path; your_commands_here). La navegación del directorio de regreso al antiguo PWD está implícita al final de la subcapa. También funciona para sustituciones de comandos.
user4642212

Respuestas:

136

Podrías agregar

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

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

al principio de cada guión. Esta es probablemente la cantidad mínima de trabajo que se necesitará para resolver su problema.

chepner
fuente
Exactamente lo que necesitaba ... ¡Gracias!
RonzyFonzy
Si también desea silenciar los errores (por ejemplo, no existe ese directorio), puede usar en &>lugar de>
MattSturgeon
4
Tenga cuidado al silenciar errores: podría crear una falla difícil de diagnosticar en una fecha posterior. Asegúrese de verificar si hay un código de retorno incorrecto y responda en consecuencia.
David Spillett
1
@ xdevs23 || exit $?es equivalente a solo || exit. Lo mismo para return.
user4642212
1
@bmacnaughton No tiene ningún argumento requerido ; acepta -nuna familia completa de argumentos -Ny +N(para un número entero N).
chepner
3

En su archivo .profile (como se llame en su sistema) agregue:

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

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

export pushd popd
bozon
fuente
13
Esto afecta a todo el sistema ... personalmente, no recomiendo de esta manera. .
Sean83
3

En zsh puedes setopt PUSHDSILENT. Pon esto en tu ~/.zshrc.

Michael Deardeuff
fuente
1
O use popd -q(silencioso).
rxw
5
popd no tiene -qopción
MarekN
2
@MarekN: el comentario anterior de "popd -q" se refería a zsh, no a bash, a pesar de que la pregunta original estaba etiquetada como que quería respuestas de bash, no zsh.
b-jazz
Este es un buen comentario o una tangente a una respuesta, pero no pertenece como una respuesta independiente a una pregunta sobre la que no se está preguntando zsh.
chepner