Use o alias e leve-o

4

Digamos que eu tenha esse alias no meu .bashrc

alias somedir="cd /var/www/site"

como posso usar somedir em dizer ... um comando cd ?

por exemplo,

cd somedir/app/

fazendo isso atualmente retorna:

-bash: cd: somedir/app: No such file or directory

É possível usar um apelido dessa maneira?

    
por treyBake 22.10.2018 / 10:26

3 respostas

11

O shell bash tem uma variável shell CDPATH que ajuda você a fazer isso sem um alias:

 $ CDPATH=".:/var/www/site"
 $ cd app
 /var/www/site/app

Se houver um subdiretório de app chamado doc :

 $ cd app/doc
 /var/www/site/app/doc

Com um valor CDPATH de .:/var/www/site , o comando cd primeiro procurará no diretório atual o caminho do diretório fornecido na linha de comando e, se nenhum for encontrado, ele aparecerá em /var/www/site . / p>

Do manual bash :

CDPATH

The search path for the cd command. This is a colon-separated list of directories in which the shell looks for destination directories specified by the cd command. A sample value is ".:~:/usr".

Observe que CDPATH não deve ser exportado, pois você geralmente não deseja que essa variável afete bash scripts executados a partir de sua sessão interativa.

    
por 22.10.2018 / 12:18
1

Citação de uma referência útil de Bash (ênfase minha):

A Bash alias is essentially nothing more than a keyboard shortcut, an abbreviation, a means of avoiding typing a long command sequence. ... It would be nice if aliases could assume some of the functionality of the C preprocessor, such as macro expansion, but unfortunately Bash does not expand arguments within the alias body. Moreover, a script fails to expand an alias itself within "compound constructs," such as if/then statements, loops, and functions. An added limitation is that an alias will not expand recursively. Almost invariably, whatever we would like an alias to do could be accomplished much more effectively with a function.

Não obstante o seu caso especial de CDPATH , como Kusalananda respondeu , uma função equivalente pode ser semelhante a:

somedir() {
    cd /var/www/site/"${1:-}"
}

Agora você tem:

$ pwd
/tmp
$ somedir
$ pwd
/var/www/site
$ somedir app
$ pwd
/var/www/site/app
    
por 22.10.2018 / 20:00
0

Os alias não funcionam assim, mas você pode usar uma variável:

somedir="/var/www/site"
cd "$somedir/app"

Com o devido crédito para Fox e RoVo por sugerir isso nos comentários

E se você quiser salvar alguns pressionamentos de tecla, poderá configurar um alias:

alias somedir='cd "$somedir"'

Ou se você habilitar autocd , você pode cd dando apenas a variável como um comando:

~$ shopt -s autocd
~$ "$somedir"
/var/www/site$ 
    
por 22.10.2018 / 15:47

Tags