我可以在bash中创建一个自定义的“目录别名”,如“〜”吗?


11

在bash中,我可以cd ~使用任何命令进入我的主目录并实际参考我的主目录~

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

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

cp ~/home.png ~~/set_8/home_4.png

如果可以的话怎么办?如果不能,是设计还是为什么呢?

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


1
对你没有特别的帮助,但是你可以用.... ZSH中的全局别名来做,但不能用BASH做。:别名-g ~~ ='/ mnt / photon / work / foo_project /'
SuperMagic 2013年

1
@SuperMagic:我也喜欢全局别名。但在第二个例子中(cp ~~ / set ...),它们将失败。命名目录更合适:n=/mnt/photon/work/foo_project然后cp foo ~n/bar。(注意OP:也限于zsh)。
2013年

1
@OliverSalzburg:我不认为这是重复的。另一个问题是关于单个字符重映射(@_),这在bash中是不可能的,而~~肯定是(hacky,但可能)。此外,它没有回答如何重新映射。
Dennis 2013年

Answers:


24

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

Bash tilde扩展支持以下代字号前缀:

~            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'

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

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

sudo useradd '~'
sudo sed -i 's#:/home/~:[^:]*$#:/mnt/photon/work/foo_project:/bin/false#' /etc/passwd

当然,一个更“理智”的方法就是定义一个shell变量,该变量~/.bashrc使用该命令指向您的目录

foo=/mnt/photon/work/foo_project

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.