É legal ignorar aliases?

1

Eu tenho alias rm='rm -i' no meu arquivo ~/.bashrc (Acabei de saber que é considerada má prática por alguns).

Parece que o alias não é levado em conta quando executado com nice :

bli@naples:~$ touch test
bli@naples:~$ rm test
rm: remove regular empty file 'test'? n
bli@naples:~$ nice rm test
bli@naples:~$ 

Por que isso acontece?

    
por bli 20.09.2016 / 16:05

3 respostas

3

Por padrão, nice é um comando externo:

$ command -v nice
/usr/bin/nice

Isso significa que não tem conhecimento de aliases, que são um recurso de shell:

$ alias foo='echo hello'
$ foo
hello
$ nice foo
nice: foo: No such file or directory

No entanto, há um recurso do shell que permite que os aliases também expandam mais aliases. Você termina a expansão com um espaço.

$ alias nice='/usr/bin/nice '

Identifique esse espaço no final; é importante.

Agora ...

$ nice foo
hello
$ command -v nice
alias nice='/usr/bin/nice '

Qualquer comando externo pode ser empacotado com um alias como este, se você quiser que o shell faça expansão de alias.

    
por 20.09.2016 / 16:32
2

nice não é bash . bash substitui os aliases, enquanto nice não. O uso de aliases é um recurso somente bash. E zsh, ksh, ... então: recurso de shell. nice não é um shell.

    
por 20.09.2016 / 16:06
1

nice usará uma das chamadas do sistema exec(3) , que não sabem nada sobre os aliases do shell. A substituição de alias global pode ser feita em alguns shells (por exemplo, ZSH), embora eu a considere uma arma tão grande que menciono apenas como um aviso para as próximas 10 gerações:

% alias -g rm='rm -i'
% echo hi rm there
hi rm -i there
% 
    
por 20.09.2016 / 16:28