Não exibe a pilha pushd / popd em vários scripts bash (pushd / popd silencioso)


93

Cada vez que uso pushd ou popd, ele imprime a pilha na saída padrão. Como não fazer isso?

Não quero fazer pushd > /dev/nulltodas as vezes porque tenho muitos scripts chamando uns aos outros.

Talvez uma boa substituição resolva isso, mas precisarei substituir esses recursos embutidos apenas em meus scripts e, em seguida, restaurar o comportamento correto.


2
Se alguém se deparou com essa questão querendo silenciar uma única ocorrência, você pode substituir pushde popdpor cde cd ~-. ~-é uma expansão de til que é definida como $ OLDPWD .
Agustín Lado

@AgustínLado cd -também funciona. Não tenho certeza de qual versão é mais compatível com uma ampla variedade de sistemas.
Shiplu Mokaddim

1
@ShipluMokaddim: Sem til, ele imprime o nome da pasta (pelo menos no Ubuntu 18.04 rodando em WSL).
astraujums

Se você tiver uma sequência de comandos entre a cd some/pathe a cd -ou cd "${return_wd}"ou algo semelhante, considere agrupar os comandos intermediários em uma função e use um subshell como (cd some/path; your_commands_here). A navegação de diretório de volta ao PWD antigo está implícita no final do subshell. Também funciona para substituições de comandos.
user4642212

Respostas:


133

Você poderia adicionar

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

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

no início de cada script. Esta é provavelmente a quantidade mínima de trabalho necessária para resolver seu problema.


Exatamente o que eu precisava ... Obrigado!
RonzyFonzy,

Se você quiser silenciar erros (por exemplo, nenhum diretório) também, você pode usar em &>vez de>
MattSturgeon

4
Tenha cuidado ao silenciar erros: você pode criar uma falha difícil de diagnosticar posteriormente. Certifique-se de verificar se há um código de retorno não OK e responder a ele de acordo.
David Spillett

Esta é a opção menos invasiva.
PuzzledVacuum

1
@ xdevs23 || exit $?é equivalente a apenas || exit. O mesmo para return.
user4642212

3

Em seu arquivo .profile (o que quer que seja chamado em seu sistema), adicione:

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

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

export pushd popd

13
Isso afeta todo o sistema ... pessoalmente, não recomendo dessa forma. .
Sean83

3

No zsh você pode setopt PUSHDSILENT. Coloque isso no seu ~/.zshrc.


1
Ou use popd -q(silencioso).
rxw

5
popd não tem -qopção
MarekN

2
@MarekN: o comentário anterior de "popd -q" referia-se a zsh, não a bash, embora a pergunta original tenha sido marcada como querendo respostas de bash, não zsh.
b-jazz de

Este é um bom comentário ou tangente a uma resposta, mas não pertence como uma resposta independente a uma pergunta que não está perguntando sobre zsh.
chepner
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.