Why does the output change
to literal string? How can I prevent that from happening?I am trying to wrap some commands into a bash script, so to prevent a command expansion from removing NUL:
S="$(uuencode -m "$FILE" /dev/stdout)"
Porque você usou eval , que adiciona outro nível de processamento de shell. eval executa o comando printf a , em que as contrabarras escapam do zero e o n\neval , deixando-as como estão com a barra invertida removida.
Você pode evitar isso, não usando "$@" > "$FILE" . Apenas usar eval deve funcionar para executar o comando fornecido como argumentos para o script. Embora nesse caso, você não pudesse usar redirecionamentos ou outras sintaxes de shell, como era possível com uuencode -m . Ou você poderia redesenhar a coisa toda para não precisar passar comandos como argumentos.
Isso é um problema aqui? a não deve produzir bytes NUL. Exatamente o oposto, já que codifica dados binários para texto.
Esse último script grava um $FILE , um NUL e uma nova linha para od e passa o mesmo para 0000000 61 00 0a , que imprime a representação hexadecimal desses, %code% , ou algo assim. / p>