在 zsh 中源 .bashrc 而不打印任何输出

在 zsh 中源 .bashrc 而不打印任何输出

过去,我一直使用 bash,因为它无处不在。
但最近我开始尝试zsh。我不想放弃更新我的.bashrc文件,它已同步到我的所有服务器。因此,在我的中,我使用命令.zshrc获取了旧的。.bashrcsource ~/.bashrc

一切都很顺利,除了每次我用 zsh 打开一个新的终端窗口时。
屏幕上有一堆信息提示。它看起来像这样:

pms () {
    if [ -n "$1" ]
    then
        user="$1"
    else
        user="zen"
    fi
    python /Users/zen1/zen/pythonstudy/creation/project_manager/project_manager.py $user show "$2"
}
pmcki () {
    if [ -n "$1" ]
    then
        user="$1"
    else
        user="zen"
    fi
    python /Users/zen1/zen/pythonstudy/creation/project_manager/project_manager.py $user check_in "$2"
}
zen1@bogon:~|⇒

这些是我的 .bashrc 中的函数定义。它们是由source ~/.bashrc我的.zshrc文件触发的。

我想要的是安静地.zshrc获取我的资源.bashrc,隐藏所有 stderr 和 stdout 输出。

可以这样做吗?如何?

答案1

emulate -R ksh -c 'source ~/.bashrc'

这告诉 zsh 在加载时模拟 ksh .bashrc,因此它基本上会应用 ksh 解析规则。 Zsh 没有 bash 模拟模式,ksh 是最接近的。此外,当执行 中定义的函数时.bashrc,在函数评估期间也会启用 ksh 仿真模式。

希望这能解决您在 zsh 读取.bashrc.如果没有,应该很容易调整你的,.bashrc这样它在大多数情况下都可以在两个 shell 下正常工作。使一些部分成为有条件的,例如完全不同的提示设置和键绑定。

if [[ -z $ZSH_VERSION ]]; then
  bind …
  PS1=…
fi

如果您确实想隐藏所有输出,可以将其重定向到/dev/null( source ~/.bashrc >/dev/null 2>&1),但我不建议这样做:您只是隐藏了指示某些内容无法正常工作的错误,这并不会使该内容正常工作。

相关内容