No bash, echo
é uma função interna, então você está obtendo esse comportamento. Em sh não é um builtin . Parece que o sh usa seu comando "echo" embutido, que é diferente.
Portanto, tente usar /bin/echo
em vez de sem o /bin/
.
Estou escrevendo um script de shell que anexa conteúdo binário a um arquivo. Eu tentei usar este comando:
echo -en '\x61\x62\x63..' >> /tmp/myfile
mas isso causou a seguinte saída:
-en \x61\x62\x63..
Existe alguma maneira de acrescentar o conteúdo a um arquivo em vez de ter que remover todo o conteúdo de cada vez?
Nota
Estou tentando fazer isso em um sistema que somente tem /bin/sh
, este comando funciona bem com bash
, mas não ao usar o shell padrão.
Se quiser manter a portabilidade, não é possível usar echo ou printf , ambos tratam as seqüências de escape \xXX
não especificadas como POSIX definidas.
Mesmo no sistema GNU, o comportamento de echo
, seja interno ou /bin/echo
, pode ser alterado. Você pode tentar:
$ POSIXLY_CORRECT=1 /bin/echo -en '\x61'
-en \x61
$ env BASHOPTS=xpg_echo POSIXLY_CORRECT=1 bash -c "echo -en '\x61'"
-en a
(Você deve ler este para obter mais detalhes).
Com a caixa de ferramentas POSIX padrão, você pode usar awk
:
$ awk 'BEGIN{printf "%c%c%c..", 97, 98, 99}'
abc..