当我键入 时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 ;)