¿Puedo hacer un "alias de directorio" personalizado como '~' en bash?

13

En bash puedo ir a mi directorio de inicio con cd ~y realmente referirme a mi directorio de inicio con cualquier comando con ~.

¿Puedo hacer nuevos "alias de directorio" personalizados (?) Para referirme a otros directorios? Ejemplo hipotético:

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

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

¿Cómo se puede hacer, si es así? Si no puede, ¿es por diseño y por qué?

Es bueno tener: ¿Dónde y cómo ~se establece y se vincula a este "~"?

n611x007
fuente
1
No es particularmente útil para usted, pero puede hacerlo con alias globales en ... ZSH, pero no BASH. : alias -g ~~ = '/ mnt / photon / work / foo_project /'
SuperMagic
1
@SuperMagic: también me gustan los alias globales. Pero en el segundo ejemplo (cp ~~ / set ...) fallarán. Los directorios con nombre son más apropiados: n=/mnt/photon/work/foo_projecty luego cp foo ~n/bar. (Nota para el OP: también limitado a zsh).
mpy
1
@OliverSalzburg: No creo que esto sea un duplicado. La otra pregunta se refiere a las reasignaciones de caracteres individuales ( @o _), que no es posible en bash, mientras que ~~ciertamente es (hacky, pero posible). Además, no responde cómo se realiza esta reasignación.
Dennis
La pregunta relacionada fue: superuser.com/questions/541767
n611x007

Respuestas:

25

La tilde no es un alias, es parte de la expansión de shell de bash (al igual que *.txto $((1 + 2))).

La expansión bash tilde admite los siguientes prefijos 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'

dirsusa la pila de directorios. Puede usar pushdpara agregarle un directorio.

Para responder a su pregunta específica sobre ~~, sí, es posible asignarle un directorio. Simplemente cree un usuario llamado ~y configúrelo /mnt/photon/work/foo_project/como su directorio de inicio:

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

Por supuesto, un enfoque mucho más "sensato" es solo definir una variable de shell que apunte a su directorio ~/.bashrccon el comando

foo=/mnt/photon/work/foo_project

que se puede acceder a través de $foo, como de costumbre.

Dennis
fuente