【问题标题】:Don't display pushd/popd stack across several bash scripts (quiet pushd/popd)不要跨多个 bash 脚本显示 pushd/popd 堆栈(安静的 pushd/popd)
【发布时间】:2014-10-06 22:23:17
【问题描述】:

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

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

也许一个不错的覆盖可以做到这一点,但我只需要在我的脚本中覆盖这些内置函数,然后恢复正确的行为。

【问题讨论】:

  • 如果有人遇到这个问题想要让单个事件静音,您可以将pushdpopd 替换为cdcd ~-~- 是一个 波浪号扩展,设置为 $OLDPWD
  • @AgustínLado cd - 也可以。不确定哪个版本更兼容各种系统。
  • @ShipluMokaddim:没有波浪号,它会打印文件夹名称(至少在 WSL 上运行的 Ubuntu 18.04 上)。
  • 如果您有一系列介于 cd some/pathcd -cd "${return_wd}" 或类似名称之间的命令,请考虑将它们之间的命令组合成一个函数并使用类似 (cd some/path; your_commands_here) 的子shell .返回到旧 PWD 的目录导航隐含在子 shell 的末尾。也适用于命令替换。

标签: bash output built-in


【解决方案1】:

你可以添加

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

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

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

【讨论】:

  • 正是我需要的……谢谢!
  • 如果你也想消除错误(例如没有这样的目录),那么你可以使用&>而不是>
  • 在消除错误时要小心:您可能会在以后创建难以诊断的故障。确保检查不正常的返回代码并做出相应的响应。
  • @xdevs23 || exit $? 仅相当于 || exitreturn 也一样。
  • @bmacnaughton 它没有任何必需的参数;它接受-n 以及-N+N 的整个家族(对于整数N)参数。
【解决方案2】:

在您的 .profile 文件中(无论它在您的系统中如何调用)添加:

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

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

export pushd popd

【讨论】:

  • 这会影响整个系统......我个人不推荐这种方式。 .
【解决方案3】:

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

【讨论】:

  • 或者使用popd -q(安静)。
  • popd 没有-q 选项
  • @MarekN:“popd -q”的先前评论指的是 zsh,而不是 bash,即使最初的问题被标记为想要 bash 答案,而不是 zsh。
  • 这是一个很好的评论或与答案的切线,但它不属于对不询问 zsh 的问题的独立答案。
猜你喜欢
  • 2019-07-03
  • 2019-11-12
  • 2016-12-08
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 2023-03-29
相关资源
最近更新 更多