bash 目录快捷方式

bash 目录快捷方式

当我键入 时cd ~foo,我希望 bash 将我带到某个目录,foo作为键入 的完整目录路径的快捷方式foo。我希望能够cp ~foo/bar.txt ~/bar.txt将文件从/foo/目录复制到主目录...所以基本上,我想要一些完全一样的东西~/,但是我指定目录应该是什么。 [我确定我应该jfgi,但我不知道该fg]

答案1

我用来执行此操作的方法是创建一个目录,其中包含指向您希望快捷方式执行的目录的符号链接,并将该目录添加到您的 CDPATH 中。 CDPATH 控制cd切换目录时搜索的位置,因此如果该符号链接目录位于 CDPATH 中,您可以cd立即转到任何符号链接目录:

mkdir ~/symlinks
ln -s /usr/bin ~/symlinks/b
export CDPATH=~/symlinks
cd b   # Switches to /usr/bin

当然,缺点是如果当前目录中有一个名为“b”的目录,则该目录将无法工作——该目录优先于 CDPATH


我通常不喜欢“首先你需要切换 shell”的答案,但是这个精确的特征存在于中兴,如果你愿意用它来代替;它被称为命名目录。您导出一个变量foo,当您引用~foo它时,它会解析为 的值$foo。这特别方便,因为它可以在以下命令中使用cd

echo hi > /tmp/test
export t=/tmp
cat ~t/test   # Outputs "hi"

答案2

您可以编写一个包装函数并将cd其称为“cd”(最终该函数将builtin cd使用builtin关键字进行调用)。您可以使用前缀字符,在您的函数看到它之前,Bash 不会在命令行上展开该前缀字符,并且该字符不太可能作为目录名称中的初始字符出现,例如“:”。您可能希望使其更加健壮,但这里有一个简单的概述:

# format: [semicolon] shortcut colon destination [semicolon] ...
export CDDATA='foo:/path/to/foo;bar:/path/to/bar;baz:/path/to/baz'

cd () {
    local dest=$1
    if [[ $dest == :* ]]
    then
        [[ $CDDATA =~ (^|;)${dest:1}:([^;]*)(;|$) ]]
        dest=${BASH_REMATCH[2]}
    fi
    if [[ -z $dest ]]
    then
        cd
    else
        builtin cd "$dest"
    fi
}

cd :bar    # pwd is now /path/to/bar

答案3

与bash:

~foo为用户 foo 的主目录保留。我不建议仅仅为了方便而创建用户。

你可以让你的生活更轻松(或更困难)改变目录通过设置CDPATH环境变量(在 中查找bash(1))。

除此之外,唯一可以想到的方法是为那些要缩写的目录设置环境变量。

$ FOODIR=/var/lib/misc
$ cp ~/bar.txt $FOODIR

答案4

一种方法是为 cd 创建一个别名,替换~c所需的路径。或者只使用 zsh ;)

相关内容