当我键入 时cd ~foo,我希望 bash 将我带到某个目录foo作为键入foo. 我希望能够cp ~foo/bar.txt ~/bar.txt将文件从/foo/目录复制到主目录......所以基本上,我想要一些完全一样的东西~/,但我指定目录应该是什么。[我确定我应该jfgi,但我不知道该fg]
Mic*_*zek 43
我以前这样做的方法是创建一个目录,其中包含指向您希望快捷方式执行的目录的符号链接,然后将该目录添加到您的 CDPATH。CDPATH 控制cd切换目录时搜索的位置,因此如果该符号链接目录在您的 CDPATH 中,您可以cd立即访问任何符号链接目录:
mkdir ~/symlinks
ln -s /usr/bin ~/symlinks/b
export CDPATH=~/symlinks
cd b # Switches to /usr/bin
Run Code Online (Sandbox Code Playgroud)
当然,缺点是如果当前目录中有一个名为“b”的目录,它就不起作用——它优先于 CDPATH
我通常不喜欢说“首先你需要切换外壳”的答案,但这个确切的功能存在于ZSH 中,如果你愿意使用它;它被称为命名目录。您导出一个变量foo,当您引用~foo它时,它会解析为 的值$foo。这特别方便,因为它适用于以下命令cd:
echo hi > /tmp/test
export t=/tmp
cat ~t/test # Outputs "hi"
Run Code Online (Sandbox Code Playgroud)
Den*_*son 11
您可以为其编写一个包装函数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
Run Code Online (Sandbox Code Playgroud)
小智 7
使用 bash:
~foo保留用于用户 foo 的主目录。我不建议仅仅为了方便而创建用户。
通过设置环境变量(在 中查找),您可以在更改目录时使您的生活更轻松(或更难)。CDPATHbash(1)
除此之外,唯一要考虑的方法是为要缩写的目录设置环境变量。
$ FOODIR=/var/lib/misc
$ cp ~/bar.txt $FOODIR
Run Code Online (Sandbox Code Playgroud)