不要在多个bash脚本中显示推送/弹出堆栈(安静的推送/弹出)


93

每次我使用push或popd时,它会将堆栈打印到标准输出。怎么不这样做?

我不想pushd > /dev/null每次都做,因为我有很多互相调用的脚本。

也许可以使用一个不错的替代方法来实现,但是我只需要在脚本中替代这些内置函数,然后恢复正确的行为即可。


2
如果有人遇到了这个问题,希望以沉默一个发生,你可以更换pushd,并popdcdcd ~-~-波浪符号扩展,设置为$ OLDPWD
奥古斯丁·拉多

@AgustínLado cd -也可以。不知道哪个版本与广泛的系统更兼容。
Shiplu Mokaddim

1
@ShipluMokaddim:不带波浪号,它将打印文件夹名称(至少在WSL上运行的Ubuntu 18.04上)。
astraujums

如果您在a cd some/path和a cd -cd "${return_wd}"类似的东西之间有一系列命令,请考虑将它们之间的命令分组为一个函数,并使用像这样的子shell (cd some/path; your_commands_here)。回到旧PWD的目录导航暗示在子外壳的末尾。也适用于命令替换。
user4642212

Answers:


133

您可以添加

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

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

到每个脚本的顶部。这可能是解决您的问题所需的最少工作量。


正是我需要的...谢谢!
RonzyFonzy '16

如果您也想使错误(例如没有此类目录)静音,则可以使用&>代替方法>
MattSturgeon

4
消除错误时要小心:以后可能很难诊断出故障。确保检查不正确的返回码并做出相应的响应。
David Spillett

这是侵入性最小的选择。
PuzzledVacuum

1
@ xdevs23 || exit $?等同于just || exit。相同return
user4642212

3

在您的.profile文件中(无论系统中什么名称),添加:

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

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

export pushd popd

13
这会影响整个系统...就我个人而言,我不建议这样做。。
肖恩83年

3

在zsh中可以setopt PUSHDSILENT。把它放在你的~/.zshrc


1
或使用popd -q(安静)。
rxw

5
popd没有-q选择
MarekN

2
@MarekN:“ popd -q”的先前注释是指zsh,而不是bash,即使原始问题被标记为需要bash答案,而不是zsh。
b-爵士

这是一个很好的注释,也可以是答案的切线,但它并不作为对未提出问题的独立答案zsh
chepner
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.