Por que os shells implementam seus próprios comandos “echo” internamente? [duplicado]

2

(Note que esta é uma questão inteiramente acadêmica ... Estou apenas curioso sobre a resposta, não tentando resolver nenhum problema em particular.)

Na página de manual ECHO(1) (GNU echo ):

NOTE: your shell may have its own version of echo, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supports.

Na página de manual ECHO(1) (BSD echo ):

Some shells may provide a builtin echo command which is similar or identical to this utility. Most notably, the builtin echo in sh(1) does not accept the -n option. Consult the builtin(1) manual page.

Ao executar echo do shell, um comando interno é executado, mas especificando um caminho completo, por exemplo, /bin/echo , o programa externo é executado.

Qual é a justificativa para que o próprio shell implemente esse comando em particular. Definitivamente, existem comandos que devem ser implementados pelo shell (por exemplo, cd , read , etc.), mas por que echo ? É porque é usado com tanta frequência e a economia de tempo para evitar configurações de processo e comutadores de contexto é mensurável - especialmente historicamente?

Ignorando o fato de que, por exemplo bash tem um grande número de recursos não estritamente necessários, por que coisas como expr , [ / test , mkdir , rmdir , etc. não fazem isso se a velocidade fator foi importante? Coisas como mkdir e rmdir , cuja implementação é quase literalmente uma única chamada para uma função libc , parecem ser candidatos óbvios à inclusão.

    
por Christopher Schultz 05.12.2016 / 16:22

1 resposta

2

O fator de velocidade é um dos motivos. Isso faz sentido especialmente para comandos que são frequentemente usados sem argumentos de arquivo como echo , test , printf , etc. Assim eles podem ser feitos sem qualquer acesso a arquivos, nem lendo qualquer argumento de arquivo nem o próprio comando. / p>

Outros comandos como kill também se beneficiam do suporte à sintaxe de controle de tarefas do shell, como kill %1 .

Algumas shells implementam outros comandos de "nível superior", como mv in zsh , para adicionar funcionalidades como renomeação simples de padrões no estilo de shell.

    
por 05.12.2016 / 16:46