Не відображати стек 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.