Чи можу я зробити власну «псевдонім каталогів», наприклад, «~» в bash?


13

У bash я можу зайти в свій домашній каталог з cd ~і фактично посилатися на свій домашній каталог з будь-якою командою ~.

Чи можу я створити нові, власні "псевдоніми каталогів" (?) Для посилання на інші каталоги? Гіпотетичний приклад:

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

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

Як це можна зробити, якщо так? Якщо це не вдається, це задум і чому так?

Приємно мати: Де і як ~встановлено та прив’язане до цього "~"?


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. (Примітка до ОП: Також обмежено zsh).
mpy

1
@OliverSalzburg: Я не думаю, що це дублікат. Інше питання задає переоформлення ( або ) однозначних символів , що неможливо в баші, тоді як, безумовно, є (хакі, але можливо). Крім того, він не відповідає, як здійснюється це переоформлення. @_~~
Денніс

Питання, пов’язане з цим, було: superuser.com/questions/541767
n611x007

Відповіді:


25

Тильда не є псевдонімом, це частина розширення оболонки Баша (так само *.txtабо $((1 + 2))).

Розширення Bash tilde підтримує такі префікси 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, як завжди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.