Могу ли я создать собственный «псевдоним каталога», например, «~» в bash?

13

В bash я могу перейти в свой домашний каталог с cd ~помощью любой команды с помощью команды и перейти к своему домашнему каталогу ~.

Могу ли я создать новые пользовательские «псевдонимы каталогов» (?) Для ссылки на другие каталоги? Гипотетический пример:

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

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

Как это можно сделать, если так? Если не может, то это задумано и почему так?

Приятно иметь: Где и как ~устанавливается и привязывается к этому «~»?

n611x007
источник
1
Не особенно полезно для вас, но вы можете сделать это с глобальными псевдонимами в ... ZSH, но не BASH. : alias -g ~~ = '/ mnt / photon / work / foo_project /'
SuperMagic
1
@SuperMagic: мне тоже нравятся глобальные псевдонимы. Но во втором примере (cp ~~ / set ...) они потерпят неудачу. Именованные каталоги более уместны: n=/mnt/photon/work/foo_projectа потом cp foo ~n/bar. (Примечание для OP: также ограничено zsh).
mpy
1
@OliverSalzburg: я не думаю, что это дубликат. Другой вопрос касается переназначения одного символа ( @или _), что невозможно в bash, хотя, ~~безусловно, (хак, но возможно). Кроме того, это не отвечает, как это перераспределение сделано.
Деннис
Соответствующий вопрос был: superuser.com/questions/541767
n611x007,

Ответы:

25

Тильда - это не псевдоним, это часть расширения оболочки bash (как и *.txtor $((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

Конечно, гораздо более разумный подход - это просто определить переменную оболочки, которая указывает на ваш каталог в вашей ~/.bashrcкоманде

foo=/mnt/photon/work/foo_project

к которому можно получить доступ $foo, как обычно.

Деннис
источник