Um alias afeta outro alias?

14

Ainda não tenho muitos aliases configurados no meu arquivo .bash_aliases. Apenas recentemente descobri o quão útil elas podem ser.

Eu posso me ver bastante viciado em pseudônimos, portanto, antes que o arquivo fique muito pesado, eu gostaria de esclarecer algo fazendo uma pergunta muito simples. Um alias afeta outro ou sempre volta ao comando original?

Um exemplo pode deixar isso mais claro:

Eu tenho um lsalias para ls -lF. Digamos que eu também gostaria de alias dpara ls -l | grep -E "^d": dagora usa ls -lFno lugar de ls? Em caso afirmativo, é uma questão de ordem no arquivo de configuração .bash_aliases?

man alias não me esclareceu.

boehj
fonte

Respostas:

20

Dos aliases (seção 6.6 do Manual do Bash) :

A primeira palavra de cada comando simples, se não estiver entre aspas, é verificada para ver se possui um alias. Nesse caso, essa palavra é substituída pelo texto do alias.

Isso acontece quando você usa o alias, não quando o define. Aqui está um exemplo:

$ alias a1='a2 hello'
$ alias a2='echo'
$ a1
hello
$ unalias a2
$ a1
bash: a2: command not found
cjm
fonte
1
OK, ótimo, obrigado por esse exemplo (e também pelo link para o Bash Manual). Cito o Manual: "As regras relativas à definição e uso de aliases são um tanto confusas ... Para quase todos os propósitos, as funções shell são preferidas aos aliases". Eu acho que é melhor aprender a executar funções de shell então. :)
boehj
1
Sim. Os aliases podem economizar algumas digitações para comandos comuns, mas para qualquer coisa, mesmo remotamente complexa, funções personalizadas de escrita para lidar com isso geralmente é uma opção melhor.
Caleb
@ Caleb @Gilles - Obrigado pessoal. BTW, ls = 'ls --color' Eu posso ver sendo muito útil. Adoro este site. :)
boehj
2
@boehj: Uma regra prática é usar um pseudônimo quando você deseja ter argumentos automáticos para um comando, usando o nome do comando ou uma variação menor e, caso contrário, funciona. Assim alias ls='ls --color', alias cp='cp -i', mas as funções para o material mais complexo. Em particular, eu faria sua dfunção para que você possa passar argumentos para ls. [comentário publicado para corrigir um confuso braino, obrigado @cjm]
Gilles 'SO- stop
@ Gilles - OK, minha tarefa para hoje é me ensinar a replicar dcomo uma função shell.
boehj