Posso creare un “alias di directory” personalizzato come '~' in bash?


13

In bash posso andare alla mia home directory con cd ~e in realtà fare riferimento alla mia home directory con qualsiasi comando con ~.

Posso creare nuovi "alias di directory" personalizzati (?) Per fare riferimento ad altre directory? Esempio ipotetico:

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

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

Come si può fare, in tal caso? In caso contrario, è in base alla progettazione e perché?

Bello avere: dove e come ~è impostato e associato a questo "~"?


1
Non particolarmente utile per te, ma puoi farlo con alias globali in .... ZSH, ma non BASH. : alias -g ~~ = '/ mnt / photon / work / foo_project /'
SuperMagic

1
@SuperMagic: mi piacciono anche gli alias globali. Ma nel secondo esempio (cp ~~ / set ...) falliranno. Le directory nominate sono più appropriate: n=/mnt/photon/work/foo_projecte quindi cp foo ~n/bar. (Nota per l'OP: limitata anche a zsh).
mpy

1
@OliverSalzburg: non credo sia un duplicato. L'altra domanda si pone sui rimappaggi di un singolo personaggio ( @o _), che non è possibile in bash, mentre ~~certamente lo è (hacky, ma possibile). Inoltre, non risponde a come viene eseguito questo rimappatura.
Dennis

La domanda correlata era: superuser.com/questions/541767
n611x007

Risposte:


25

La tilde non è un alias, fa parte dell'espansione della shell di Bash (proprio come *.txto $((1 + 2))).

L'espansione tilde di Bash supporta i seguenti prefissi 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'

dirsutilizza lo stack di directory. È possibile utilizzare pushdper aggiungere una directory ad esso.

Per rispondere alla tua domanda specifica su ~~, sì, è possibile mappare una directory su di essa. Basta creare un utente chiamato ~e impostarlo /mnt/photon/work/foo_project/come home directory:

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

Ovviamente, un approccio molto più "sano" sta semplicemente definendo una variabile di shell che punta alla tua directory nella tua ~/.bashrccon il comando

foo=/mnt/photon/work/foo_project

a cui è possibile accedere tramite $foo, come al solito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.