是否可以将CD刻录到文件中?

codepleb 0 bash shell cd

我找到了需要访问的文件列表cd(显然是在父目录中)。

如果我做得到cd ./src/components/10-atoms/fieldset/package.json错误cd: not a directory:,那是有道理的。

但是没有办法允许这种情况吗?因为操作路径字符串非常繁琐,对我来说,为此提供一个选项是很有意义的,因为这cd是一个目录函数,并且很酷的是,如果路径不会以文件结尾,它将以递归方式跳转更高,并从给定路径中找到“第一个目录”。

John Kugelma.. 5

您可以编写一个shell函数来做到这一点。

cd() {
    local args=() arg

    for arg in "$@"; do
        if [[ $arg != -* && -e $arg && ! -d $arg ]]; then
            args+=("$(dirname "$arg")")
        else
            args+=("$arg")
        fi
    done

    builtin cd ${args[0]+"${args[@]}"}
}

~/.bashrc如果您希望将其作为默认行为,则将其放入。Shell脚本或其他程序不会继承它,因此它们不会受到影响。

它修改cd的参数,用父目录替换所有文件名。带有前划线的选项将保留。command cd调用底层的cd内置函数,因此我们不会陷入递归循环中。

(这是什么邪恶的野兽:${args[0]+"${args[@]}"}?就像"${args[@]}",它扩展了参数数组,但是避免在bash版本为4.0-4.3且已set -u启用的情况下触发带有空数组的bash错误)。