Diferença entre alias no zsh e alias no bash


9

Eu procurei, mas não encontrei nada conclusivo. Existe uma diferença entre o comando alias no zsh e o comando alias no bash? Caso contrário, isso significa que eu posso compartilhar um conjunto de aliases entre as duas conchas e esperar que funcionem como pretendia?

Respostas:



13

A sintaxe do aliascomando é a mesma em todos os shells no estilo Bourne. Assim, você pode compartilhá-los através ~/.zshrc, ~/.bashrc, ~/.kshrc, ~/.shrc, contanto que eles fazem sentido em todas as conchas.

O mesmo vale para definições de variáveis ​​e definições de funções, desde que você use o subconjunto de sintaxe suportado em todos os shells.

Se você não usar versões do zsh anteriores à 4.0, poderá colocar todas as suas definições independentes de shell em um arquivo chamado (digamos) ~/.common.rc.sh, em que a primeira linha é

emulate -LR sh 2>/dev/null

Isso diz ao zsh que espera apenas uma sintaxe compatível com sh neste arquivo. Então fonte desse arquivo perto do início ~/.bashrc, ~/.bashrc, ~/.kshrce assim por diante.

Isso é basicamente o que eu faço. Por exemplo, eu tenho o código um pouco complexa que gera um alias para lscom as minhas opções favoritas, dependendo do que está disponível ( --color, -G, -F, etc.); é agnóstico à casca, então entra .common.rc.sh. Eu também tenho aliases dependentes de shell, assim alias zcp='zmv -C'entra .zshrc.


1
Se eu colocar um /bin/shshebang na parte superior do meu arquivo de aliases, ele funcionará como pretendo para todos os shells?
Zameer Manji

1
@ZameerManji Não, não coloque uma #!linha: este não é um script independente, só pode ser originado em outro script. #!não altera o comportamento do shell de qualquer maneira.
Gilles 'SO- stop be evil'

3
Uma pequena diferença que encontrei é que o zsh aliastrata um argumento começando com a +introdução de uma opção como -faria, então alias +=somethingdeve ser escrito como alias -- +=somethingno zsh. Não pense emulateque isso muda.
Mikel

Tenha cuidado, ~/.shrcpois o Bourne Shell possui a implementação de alias mais poderosa, mas zshusa nomes de opções incompatíveis. alias -gcria um alias persistente $HOME/.globalscom o Bourne Shell. Compartilhar definições de alias só é seguro, desde que você não use mais do que os recursos do POSIX.
schily 02/07

2

zsh's aliaspermite aliases globais, enquanto bashs só são expandidos no início da linha.

Em zsh:

alias -g L="| less -FRX"

Você pode então fazer:

verbose-command L

Veja aqui uma lista de aliases globais úteis.


Chamar todos os aliases de expansão de aliases "globais" é uma péssima idéia, pois existe um conceito de aliases locais restritos a um diretório específico, enquanto aliases globais desde 38 anos se aplicam a aliases que são independentes do setor. Este conceito é de 1980 da UNOS e implementado no Bourne Shell há 6 anos. O UNOS também introduziu todos os aliases de expansão em 1980, o zsh poderia ter feito alguma pesquisa para evitar esse tipo de conflito. Veja schillix.sourceforge.net/man/man1/bosh.1.html
schily
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.