Не відображати стек pushd / popd у декількох скриптах bash (тихий pushd / popd)


94

Кожного разу, коли я використовую pushd або popd, він друкує стек до стандартного виводу. Як цього не робити?

Я не хочу робити pushd > /dev/nullкожного разу, тому що у мене багато сценаріїв, які телефонують один одному.

Можливо, це зробить хороший перевизначення, але мені потрібно буде перевизначити ці вбудовані файли лише в моїх сценаріях, а потім відновити правильну поведінку.


2
Якщо хтось зіткнувся з цим запитанням, бажаючи замовкнути один раз, ви можете замінити pushdі за popdдопомогою cdі cd ~-. ~-- це розширення тильди, яке встановлюється на $ OLDPWD .
Агустін Ладо

@ AgustínLado cd -також працює. Не впевнений, яка версія є більш сумісною з широким спектром систем.
Шиплу Мокаддім

1
@ShipluMokaddim: без тильди він друкує ім'я папки (принаймні в Ubuntu 18.04, що працює на WSL).
astraujums

Якщо у вас є послідовність команд між a cd some/pathта a cd -або cd "${return_wd}"чимось подібним, розгляньте можливість згрупування команд між ними у функцію та використовуйте подібну оболонку (cd some/path; your_commands_here). Перехід до каталогу до старої PWD мається на увазі в кінці підкорінки. Також працює для заміни команд.
user4642212

Відповіді:


134

Ви можете додати

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

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

до початку кожного сценарію. Це, мабуть, мінімальний обсяг роботи, який знадобиться для вирішення вашої проблеми.


Саме те, що мені потрібно було ... Дякую!
RonzyFonzy

Якщо ви теж хочете заглушити помилки (наприклад, немає такого каталогу), тоді ви можете використовувати &>замість>
MattSturgeon

4
Будьте обережні, вимикаючи помилки: пізніше ви можете створити важку для діагностики несправність. Переконайтеся, що ви перевірили наявність неправильного коду повернення та відповіли на нього відповідно.
Девід Спільетт,

1
@ xdevs23 || exit $?еквівалентно просто || exit. Те саме для return.
user4642212

1
@bmacnaughton Він не має необхідних аргументів; він приймає -nі цілу родину аргументів -Nі +N(для цілого числа N).
чепнер

3

У вашому файлі .profile (як це колись називається у вашій системі) додайте:

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

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

export pushd popd

13
Це впливає на всю систему ... особисто, я не рекомендую такий спосіб. .
Sean83

3

У zsh можна setopt PUSHDSILENT. Покладіть це у свій ~/.zshrc.


1
Або використовуйте popd -q(тихо).
rxw

5
popd не має -qможливості
MarekN

2
@MarekN: попередній коментар "popd -q" мав на увазі zsh, а не bash, хоча оригінальне запитання було позначено як баш відповіді, а не zsh.
b-jazz

Це приємний коментар або дотична до відповіді, але він не належить як окрема відповідь на питання, про яке не задається zsh.
чепнер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.