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
echoembutido. 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