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

我找到了cd所需的文件列表(显然是父目录)。

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

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

qiche520 回答:是否可以将CD刻录到文件中?

您可以编写一个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[@]}",它扩展了参数数组,但避免了在猛烈打击的情况下触发a bash bug with empty arrays的情况。版本是4.0-4.3,并且您已启用set -u。)

,

此功能应满足您的需求:

cdd() { test -d "$1" && cd "$1" || cd $(dirname "$1") ; }

如果第一个参数"$1"是目录,则仅将cd放入其中, 否则cd进入包含它的目录。

应改进此功能以考虑特殊文件,例如设备或符号链接。

,

您可以输入更长的行(或创建专用的shell脚本)

cd $(dirname ./src/components/10-atoms/fieldset/package.json)

如果您将其添加到脚本中,则可以是:

cd $(dirname $1)

但是您需要以这种方式执行它:

. script_name ./src/components/10-atoms/fieldset/package.json
,

您可以将此函数放在~/.bashrc中:

function ccd() {
    TP=$1                    # destination you're trying to reach
    while [ ! -d $TP ]; do   # if $TP is not a directory:
        TP=$(dirname $TP)   # remove the last part from the path
    done                    # you finally got a directory
cd $TP                       # and jump into it
}

用法:ccd /etc/postfix/strangedir/anotherdir/file.txt将带您进入/etc/postfix

本文链接:https://www.f2er.com/3029939.html

大家都在问