/ bin / sh - o operador echo não está funcionando como esperado

1

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.

    
por Paradoxis 20.06.2015 / 20:53

2 respostas

1

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

    
por 20.06.2015 / 21:12
1

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..
    
por 20.06.2015 / 22:14