Не отображать стек pushd / popd в нескольких сценариях bash (тихий pushd / popd)


100

Каждый раз, когда я использую pushd или popd, он выводит стек на стандартный вывод. Как этого не сделать?

Я не хочу делать это pushd > /dev/nullкаждый раз, потому что у меня много скриптов, вызывающих друг друга.

Может быть, хорошее переопределение сделает это, но мне нужно будет переопределить эти встроенные функции только в моих скриптах, а затем восстановить правильное поведение.


3
Если кто-то столкнулся с этим вопросом, желая заставить замолчать одно событие, вы можете заменить 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

Ответы:


143

Вы могли бы добавить

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, хотя исходный вопрос был помечен как желающий получить ответы на bash, а не на zsh.
— b-jazz

1
Это хороший комментарий или дополнение к ответу, но он не является отдельным ответом на вопрос, о котором не спрашивают zsh.
— chepner
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.