As builtins estão presentes como uma maneira de fazer com que o sistema chame mais rapidamente. Então, acredito que o comando read
esteja presente como um builtin para ser mais eficiente.
Citações de aqui ,
These builtin commands are part of the shell, and are implemented as
part of the shell's source code. The shell recognizes that the command
that it was asked to execute was one of its builtins, and it performs
that action on its own, without calling out to a separate executable.
Different shells have different builtins, though there will be a whole
lot of overlap in the basic set.
Agora, gostaria que isso fosse feito por você mesmo, para que você possa entender por que read
está presente como um shell interno.
Normalmente, você não pode fazer strace
em builtins de shell. No entanto, há uma solução alternativa para isso também. Isso é explicado de maneira muito precisa neste responder .
- No primeiro shell, execute o comando como
stty -echo
.
- Abra outro shell e execute o comando como
cat | strace bash >
/dev/null
.
- Agora, o shell estaria aguardando o usuário digitar os comandos
e lá, quando o usuário digita os comandos, você pode ver o que
acontece no nível do sistema também.
- Quando você dá os 3 comandos acima, você pode ver que a leitura
menos chamadas do sistema do que os 2 comandos restantes. Eu não estou colando
a saída de
strace
, pois é muito grande.