使用 cdpath 和 zsh 进行静默 cd 吗?

使用 cdpath 和 zsh 进行静默 cd 吗?

当使用导航到 找到的不相对于 的cd路径时,结果路径会被回显。例如,假设目录结构类似于 ,并且类似于,则会看到以下内容:cdpath.~/parent/childcdpathcdpath(~/parent)

$ cd parent
$ cd ~
$ cd child
~/parent/child
$

基本上,我想cd child保持静音,就像 一样cd ~/parent/child,无论距离当前目录有多远。有没有办法cd在它用于cdpath定位和跳转到目录时保持静音?

答案1

我认为,这是硬编码到 shell 中的。以下是摘录自builtin.c

if (isset(INTERACTIVE) || isset(POSIXCD)) {
    if (func != BIN_CD && isset(INTERACTIVE)) {
        if (unset(PUSHDSILENT) && !quiet)
            printdirstack();
    } else if (doprintdir) {
        fprintdir(pwd, stdout);
        putchar('\n');
    }
}

int doprintdir是一种标志,在使用例如时设置cdpath

因此,如果您确实想摆脱新目录的打印,请注释掉else if源代码中的部分 - 缺点是您将绝不不再受到关注。

答案2

Zsh 5.8 为此引入了一个选项:

setopt cd_silent

答案3

一种方法是推出你自己的cd函数:

光盘()
{
    如果 [ $# = 0 ]
    然后
        内置 cd "$HOME"
        返回
    # 使用 if [[ "$1" =~ ^/ ]]
    # 如果 zsh 支持的话,请点击此处。
    案例“$1”
      /*)
        内置 cd“$1”
        返回
    埃萨克
    如果[-d“$1”-a-x“$1”]
    然后
        内置 cd“$1”
        # 您可能希望仅当 cd 成功时才返回。
        返回
    对于 ~/parent /other/dir/thatIuse_a_lot 中的基础
        如果内置 cd "$base/$1" 2> /dev/null
        然后
            返回
    完毕
    echo "$1:cd failed" >&2 # 根据您的喜好进行定制。
    返回 1 # 表示失败。
}

我现在无法使用 zsh,但我在 Korn shell 中测试了这一点。当然,您可以对其进行增强,以便cdpath在运行时解析变量;我将把它留作练习。

答案4

最简单的解决方案,适用于 sh、bash 和 zsh:alias cd='cd >/dev/null'

也适用于cd -

相关内容