Novo apelido não disponível depois;

9

Até agora eu pensei que um ponto-e-vírgula no shell tem (de alguma forma) o mesmo significado que uma quebra de linha. Então fiquei surpreso por

alias <name>=<replacement text>; <name>

<name> é desconhecido enquanto é conhecido na próxima linha. csh , tcsh , sh , ksh e bash se comportam da mesma forma. Pelo menos para csh , não importa se o alias é usado diretamente ou se um script é originado antes do semccolon - os aliases não são conhecidos após ; , mas são conhecidos na próxima linha de comando. Isso é um bug ou esse comportamento é pretendido?

    
por user3224237 02.11.2015 / 14:18

2 respostas

9

A sintaxe alias que você está usando é inadequada para um shell POSIX, para um shell POSIX, você precisa usar:

alias name='replacement'

Mas para todos os shells, isso não funciona porque a substituição do alias é feita no início do analisador.

Antes que a configuração do alias seja executada, toda a linha foi lida pelo analisador e, por esse motivo, sua linha de comando não funcionará.

Se o alias aparecer na próxima linha de comando, ele funcionará.

    
por 02.11.2015 / 14:39
5

Esse comportamento é pretendido e especificado por POSIX sob Substituição de alias .

Um apelido foi substituído logo após o shell realizar o Reconhecimento de símbolo e antes de qualquer < a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10"> Regras gramaticais aplicadas. No momento em que você chamou o alias <name> , o comando alias não foi executado.

    
por 02.11.2015 / 14:39

Tags