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