Posso criar um “alias de diretório” personalizado como '~' no bash?

9

No bash eu posso ir ao meu diretório home com cd ~ e realmente me referir ao meu diretório home com qualquer comando com ~ .

Posso criar novos "aliases de diretórios" personalizados (?) para fazer referência a outros diretórios? Exemplo hipotético:

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

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

Como isso pode ser feito? Se não for possível, é por design e por quê?

É bom ter: Onde e como ~ está definido e vinculado a este "~"?

    
por n611x007 14.03.2013 / 13:01

1 resposta

22

O til não é um alias, é parte da expansão do shell do bash (assim como *.txt ou $((1 + 2)) ).

Expansão do til de Bash suporta os seguintes prefixos de til :

~            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 usa a pilha de diretórios. Você pode usar pushd para adicionar um diretório a ele.

Para responder à sua pergunta específica sobre ~~ , sim, é possível mapear um diretório para ela. Basta criar um usuário chamado ~ e definir /mnt/photon/work/foo_project/ como seu diretório inicial:

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

Naturalmente, uma abordagem muito mais "saudável" é apenas definir uma variável de shell que aponta para o seu diretório em ~/.bashrc com o comando

foo=/mnt/photon/work/foo_project

, que pode ser acessado via $foo , como de costume.

    
por 14.03.2013 / 13:36

Tags