Puis-je créer un «alias de répertoire» personnalisé comme «~» dans bash?

13

En bash, je peux aller dans mon répertoire personnel avec cd ~et me référer à mon répertoire personnel avec n'importe quelle commande avec ~.

Puis-je créer de nouveaux "alias de répertoire" personnalisés (?) Pour faire référence à d'autres répertoires? Exemple hypothétique:

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

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

Comment cela peut-il être fait, si oui? Si ce n'est pas le cas, est-ce par conception et pourquoi?

C'est bien d'avoir: où et comment ~est réglé et lié à ce "~"?

n611x007
la source
1
Pas particulièrement utile pour vous, mais vous pouvez le faire avec des alias globaux dans ... ZSH, mais pas BASH. : alias -g ~~ = '/ mnt / photon / work / foo_project /'
SuperMagic
1
@SuperMagic: J'aime aussi les alias globaux. Mais dans le deuxième exemple (cp ~~ / set ...) ils échoueront. Les répertoires nommés sont plus appropriés: n=/mnt/photon/work/foo_projectet ensuite cp foo ~n/bar. (Remarque pour l'OP: également limité à zsh).
mpy
1
@OliverSalzburg: Je ne pense pas que ce soit un doublon. L'autre question concerne les remappages de caractère unique ( @ou _), ce qui n'est pas possible dans bash, alors qu'il l' ~~est certainement (hacky, mais possible). En outre, il ne répond pas à la façon dont ce remappage est effectué.
Dennis
La question connexe était: superuser.com/questions/541767
n611x007

Réponses:

25

Le tilde n'est pas un alias, il fait partie de l'expansion du shell de bash (tout comme *.txtou $((1 + 2))).

L'extension Bash tilde prend en charge les préfixes tilde suivants:

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

dirsutilise la pile de répertoires. Vous pouvez utiliser pushdpour y ajouter un répertoire.

Pour répondre à votre question spécifique ~~, oui, il est possible de lui mapper un répertoire. Il suffit de créer un utilisateur appelé ~et défini /mnt/photon/work/foo_project/comme son répertoire personnel:

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

Bien sûr, une approche beaucoup plus «saine» consiste simplement à définir une variable shell qui pointe vers votre répertoire dans votre ~/.bashrcavec la commande

foo=/mnt/photon/work/foo_project

qui est accessible via $foo, comme d'habitude.

Dennis
la source