Jangan tampilkan tumpukan pushd / popd di beberapa skrip bash (pushd / popd diam)

100

Setiap kali saya menggunakan pushd atau popd, tumpukan akan dicetak ke keluaran standar. Bagaimana tidak melakukannya?

Saya tidak ingin melakukannya pushd > /dev/nullsetiap kali karena saya memiliki banyak skrip yang memanggil satu sama lain.

Mungkin penimpaan yang bagus akan melakukannya, tetapi saya harus menimpa bawaan ini hanya di skrip saya, dan kemudian memulihkan perilaku yang benar.

bemug
sumber
3
Jika seseorang menemukan pertanyaan ini ingin membungkam satu kejadian, Anda dapat mengganti pushddan popddengan cddan cd ~-. ~-adalah ekspansi tilde yang disetel ke $ OLDPWD .
Agustín Lado
@ AgustínLado cd -juga bekerja. Tidak yakin versi mana yang lebih kompatibel dengan berbagai sistem.
Shiplu Mokaddim
1
@ShipluMokaddim: Tanpa tilde, ia mencetak nama folder (setidaknya di Ubuntu 18.04 yang berjalan di WSL).
astraujums
Jika Anda memiliki urutan perintah antara a cd some/pathdan a cd -atau cd "${return_wd}"atau yang serupa, pertimbangkan untuk mengelompokkan perintah di antara menjadi fungsi dan gunakan subkulit seperti (cd some/path; your_commands_here). Navigasi direktori kembali ke PWD lama tersirat di akhir subkulit. Juga berfungsi untuk penggantian perintah.
user4642212

Jawaban:

143

Anda bisa menambahkan

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

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

ke bagian atas setiap skrip. Ini mungkin jumlah pekerjaan minimum yang diperlukan untuk menyelesaikan masalah Anda.

chepner
sumber
Persis yang saya butuhkan ... Terima kasih!
RonzyFonzy
Jika Anda ingin kesalahan diam (misalnya tidak ada direktori tersebut) juga, maka Anda dapat menggunakan &>bukannya>
MattSturgeon
4
Berhati-hatilah saat membungkam kesalahan: Anda dapat membuat kegagalan yang sulit didiagnosis di kemudian hari. Pastikan Anda memeriksa kode pengembalian yang tidak OK dan menanggapinya dengan benar.
David Spillett
1
@ xdevs23 || exit $?sama dengan just || exit. Sama untuk return.
user4642212
1
@bmnaughton Itu tidak memiliki argumen yang diperlukan ; itu menerima -ndan seluruh keluarga -Ndan +N(untuk sebuah integer N) argumen.
chepner
3

Di file .profile Anda (apa pun namanya di sistem Anda) tambahkan:

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

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

export pushd popd
bozon.dll
sumber
13
Ini mempengaruhi seluruh sistem ... secara pribadi, saya tidak merekomendasikan cara ini. .
Sean83
3

Dalam zsh Anda bisa setopt PUSHDSILENT. Taruh ini di ~/.zshrc.

Michael Deardeuff
sumber
1
Atau gunakan popd -q(diam).
rxw
5
popd tidak memiliki -qopsi
MarekN
2
@MarekN: komentar sebelumnya dari "popd -q" mengacu pada zsh, bukan bash, meskipun pertanyaan aslinya ditandai sebagai menginginkan jawaban bash, bukan zsh.
b-jazz
1
Ini adalah komentar yang bagus atau bersinggungan dengan sebuah jawaban, tetapi bukan sebagai jawaban yang berdiri sendiri untuk pertanyaan yang tidak ditanyakan zsh.
chepner