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.

bemug
fonte
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.

chepner
fonte
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
bozon
fonte
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.

Michael Deardeuff
fonte
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