我可以在 bash 中创建一个像“~”这样的自定义“目录别名”吗?

n61*_*007 13 bash

在 bash 中,我可以cd ~使用~.

我可以创建新的自定义“目录别名”(?)来引用其他目录吗?假设示例:

make_alias "~~" /mnt/photon/work/foo_project/

cp ~/home.png ~~/set_8/home_4.png
Run Code Online (Sandbox Code Playgroud)

如果可以,怎么做?如果不能,是设计使然吗?为什么会这样?

很高兴拥有:在哪里以及如何~设置并绑定到这个“〜”?

Den*_*nis 25

波浪号不是别名,它是 bash 的 shell 扩展的一部分(就像*.txt$((1 + 2)))。

Bash 波浪号扩展支持以下波浪号前缀:

~            The value of $HOME

~/foo        $HOME/foo

~fred/foo    The subdirectory foo of the home directory of the user fred

~+/foo       $PWD/foo

~-/foo       ${OLDPWD-'~-'}/foo

~N           The string that would be displayed by `dirs +N'

~+N          The string that would be displayed by `dirs +N'

~-N          The string that would be displayed by `dirs -N'
Run Code Online (Sandbox Code Playgroud)

dirs使用目录堆栈。您可以使用pushd向其添加目录。

要回答关于 的具体问题~~,是的,可以将目录映射到它。只需创建一个名为的用户~并将/mnt/photon/work/foo_project/其设置为它的主目录:

sudo useradd '~'
sudo sed -i 's#:/home/~:[^:]*$#:/mnt/photon/work/foo_project:/bin/false#' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

当然,一个更“理智的”的做法只是定义一个shell变量指向你的目录在你~/.bashrc用命令

foo=/mnt/photon/work/foo_project
Run Code Online (Sandbox Code Playgroud)

可以$foo像往常一样通过 访问。