Se você abrir um prompt bash
e digitar um O comando echo
, que usa um shell embutido em vez de executar /bin/echo
. As razões pelas quais ainda é importante que /bin/echo
existam são:
- Você nem sempre está usando um shell. Em várias circunstâncias, você executa um executável diretamente e não através de um shell.
- Pelo menos em teoria, alguns shells não possuem um
echo
embutido. Isso não é realmente necessário.
Para expandir # 1, suponha que você queira mover todos os arquivos regulares cujos nomes começaram com abc
em qualquer lugar em src
to dest
. Existem várias maneiras de fazer isso, mas uma delas é:
find src -name 'abc*' -type f -exec mv -nv {} dest/ \;
Mas suponha que, em vez de apenas executar isso, você deseje ver todos os comandos que serão executados primeiro. Bem, então você pode prefixar echo
no comando, assim como você poderia em outros contextos:
find src -name 'abc*' -type f -exec echo mv -nv {} dest/ \;
Mas find
não usa um shell. Isso é executado /bin/echo
.
Além de find
com -exec
ou -execdir
, o executável /bin/echo
será chamado por outros programas que executem programas, mas não por meio de um shell. Este acontece com o xargs
(que está relacionado a find
) , bem como em vários outros contextos, como Exec=
line de um arquivo .desktop
. Outro exemplo é quando você executa sudo echo
, o que pode ser útil para testar se sudo
está funcionando.
Da mesma forma, alguns shells possuem um printf
embutido, mas /usr/bin/printf
também existe.
Um motivo menos comum possível que você pode usar deliberadamente /bin/echo
é se você estava confiando nas diferenças entre ele e o comando echo
fornecido pelo seu shell. man echo
documentos /bin/echo
; help echo
in bash
documenta o bash
construído. echo
não é muito portável, porque implementações diferentes - tanto em sistemas operacionais quanto em shells no mesmo sistema operacional - suporta diferentes opções (por exemplo, -e
) e diferem no tratamento de barras invertidas . Claro, é melhor evitar confiar em tais detalhes e usar printf
em vez disso, que é muito mais portátil .
Em bash
, você pode tornar o type
builtin show /bin/echo
também - assumindo que /bin
está em sua $PATH
como sempre deveria ser - por passando o símbolo -a
:
$ type -a echo
echo is a shell builtin
echo is /bin/echo