Не отображать стек 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.