Не отображать стек 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
Bozon
источник
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