Nie wyświetlaj stosu pushd / popd w kilku skryptach bash (ciche pushd / popd)

99

Za każdym razem, gdy używam pushd lub popd, wypisuje stos na standardowe wyjście. Jak tego nie robić?

Nie chcę tego robić za pushd > /dev/nullkażdym razem, ponieważ mam wiele skryptów wywołujących się nawzajem.

Może wystarczy miła zmiana, ale będę musiał nadpisać te wbudowane tylko w moich skryptach, a następnie przywrócić poprawne zachowanie.

bemug
źródło
3
Jeśli ktoś natknął to pytanie chcąc uciszyć pojedyncze wystąpienie można zastąpić pushdi popdz cda cd ~-. ~-jest rozwinięciem tyldy ustawionym na $ OLDPWD .
Agustín Lado
@ AgustínLado cd -również działa. Nie jestem pewien, która wersja jest bardziej kompatybilna z szeroką gamą systemów.
Shiplu Mokaddim
1
@ShipluMokaddim: bez tyldy drukuje nazwę folderu (przynajmniej na Ubuntu 18.04 działającym na WSL).
astraujums
Jeśli masz sekwencję poleceń między a cd some/pathi a cd -lub cd "${return_wd}"coś podobnego, rozważ zgrupowanie poleceń między nimi w funkcję i użyj podpowłoki, takiej jak (cd some/path; your_commands_here). Nawigacja po katalogu z powrotem do starego PWD jest domniemana na końcu podpowłoki. Działa również w przypadku zastępowania poleceń.
user4642212

Odpowiedzi:

142

Możesz dodać

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

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

u góry każdego skryptu. Jest to prawdopodobnie minimalna ilość pracy potrzebna do rozwiązania Twojego problemu.

Chepner
źródło
Dokładnie to, czego potrzebowałem ... Dziękuję!
RonzyFonzy
Jeśli chcesz również wyciszyć błędy (np. Nie ma takiego katalogu), możesz użyć &>zamiast>
MattSturgeon
4
Zachowaj ostrożność podczas wyciszania błędów: możesz później stworzyć trudną do zdiagnozowania awarię. Sprawdź, czy kod zwrotny jest nieprawidłowy i odpowiednio na niego odpowiedz.
David Spillett
1
@ xdevs23 || exit $?jest odpowiednikiem just || exit. To samo dotyczy return.
user4642212
1
@bmacnaughton Nie ma żadnych wymaganych argumentów; akceptuje -ni całą rodzinę argumentów -Ni +N(dla liczby całkowitej N).
chepner
3

W swoim pliku .profile (jakkolwiek to się nazywa w twoim systemie) dodaj:

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

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

export pushd popd
bozon
źródło
13
Wpływa to na cały system ... osobiście nie polecam tego sposobu. .
Sean83
3

W zsh możesz setopt PUSHDSILENT. Umieść to w swoim ~/.zshrc.

Michael Deardeuff
źródło
1
Lub użyj popd -q(cicho).
rxw
5
popd nie ma -qopcji
MarekN
2
@MarekN: poprzedni komentarz „popd -q” odnosił się do zsh, a nie bash, mimo że pierwotne pytanie zostało oznaczone jako wymagające odpowiedzi bash, a nie zsh.
b-jazz
1
To miły komentarz lub nawiązanie do odpowiedzi, ale nie stanowi samodzielnej odpowiedzi na pytanie, o które nie chodzi zsh.
chepner