Non visualizzare lo stack pushd / popd su diversi script bash (pushd / popd silenzioso)


94

Ogni volta che uso pushd o popd, stampa lo stack sullo standard output. Come non farlo?

Non voglio farlo pushd > /dev/nullogni volta perché ho molti script che si chiamano l'un l'altro.

Forse un bel override lo farà, ma avrò bisogno di sovrascrivere questi builtin solo nei miei script, e quindi ripristinare il comportamento corretto.


2
Se qualcuno si è imbattuto in questa domanda desiderando mettere a tacere una singola occorrenza, puoi sostituire pushde popdcon cde cd ~-. ~-è un'espansione di tilde impostata su $ OLDPWD .
Agustín Lado,

@ AgustínLado cd -funziona anche. Non sono sicuro di quale versione sia più compatibile con un'ampia gamma di sistemi.
Shiplu Mokaddim,

1
@ShipluMokaddim: senza tilde stampa il nome della cartella (almeno su Ubuntu 18.04 in esecuzione su WSL).
astraujums,

Se si dispone di una sequenza di comandi tra un cd some/pathe una cd -o cd "${return_wd}"o qualcosa di simile, prendere in considerazione il raggruppamento dei comandi in mezzo in una funzione e utilizzare una subshell come (cd some/path; your_commands_here). La navigazione nella directory per tornare alla vecchia PWD è implicita alla fine della subshell. Funziona anche per le sostituzioni di comandi.
user4642212

Risposte:


135

Potresti aggiungere

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

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

all'inizio di ogni script. Questa è probabilmente la quantità minima di lavoro necessaria per risolvere il tuo problema.


Esattamente quello di cui avevo bisogno ... Grazie!
RonzyFonzy

Se vuoi mettere a tacere anche gli errori (es. Nessuna directory di questo tipo), puoi usare al &>posto di>
MattSturgeon

4
Fai attenzione quando tacitate gli errori: potresti creare un errore difficile da diagnosticare in un secondo momento. Assicurati di verificare la presenza di un codice di ritorno non corretto e di rispondere di conseguenza.
David Spillett

1
@ xdevs23 || exit $?è equivalente a just || exit. Lo stesso per return.
user4642212

1
@bmacnaughton Non ha argomenti richiesti ; accetta -ne un'intera famiglia di argomenti -Ne +N(per un intero N).
chepner

3

Nel tuo file .profile (come mai viene chiamato nel tuo sistema) aggiungi:

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

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

export pushd popd

13
Questo riguarda l'intero sistema ... personalmente, non lo consiglio in questo modo. .
Sean83

3

In zsh puoi setopt PUSHDSILENT. Metti questo nel tuo file ~/.zshrc.


1
Oppure usa popd -q(silenzioso).
rxw

5
popd non ha -qopzioni
MarekN

2
@MarekN: il commento precedente di "popd -q" si riferiva a zsh, non bash, anche se la domanda originale era contrassegnata come volendo risposte bash, non zsh.
b-jazz

Questo è un bel commento o una tangente a una risposta, ma non appartiene come risposta autonoma a una domanda di cui non si fa domande zsh.
chepner
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.