Digite um EOF sem uma quebra de linha

1

Eu tenho um pequeno comando que eu uso para copiar / colar arquivos que envolve o arquivo TAR codificado em base64 para stdin, mas o utilitário base64 continua me dando uma mensagem de erro sobre minha entrada porque eu tenho que digitar uma quebra de linha antes de emitir um EOF para parar a entrada.

por exemplo:

[root@box ~]echo hello | base64
aGVsbG8K
[root@box ~]base64 -d
aGVsbG8K[enter][ctrl+d]
hello
base64: invalid input

Ao contrário do clunkier:

[root@box ~]echo -n 'aGVsbG8K' | base64 -d
hello

O que não funciona muito bem no contexto do comando que escrevi.

Então, há alguma maneira de colocar um EOF sem essa quebra de linha extra? Eu quero dizer isso ainda tecnicamente funciona , mas eu não quero erros indicados quando não há um erro real, e eu não quero suprimir o stderr no caso de existir um erro real.

    
por Sammitch 14.08.2013 / 21:00

1 resposta

0

Acho que você deve encontrar um utilitário base64 diferente, como a versão GNU, que tolera caracteres de nova linha.

Se isso não acontecer, presumindo-se que a entrada tenha exatamente uma linha de comprimento (já que, do contrário, ela teria uma nova linha ilegal), você poderia fazer o seguinte:

echo -n "$(head -n1)" | base64 -d

ou se você não gosta de echo -n (embora pareça funcionar no seu sistema, isso não é garantido):

printf %s "$(head -n1)" | base64 -d

Existe alguma ambiguidade sobre se as novas linhas são legais na codificação base64; o RFC relevante diz que eles são legais somente se o aplicativo que usa a codificação base64 for documentado como permitido. Isso não ajuda muito para um codec de base64 de propósito geral.

Mas, AFAIK, praticamente todos os aplicativos que usam base64 permitem explicitamente novas linhas (e alguns exigem isso definindo um comprimento máximo de linha), então parece estranho para mim que o utilitário base64 não tenha algum mecanismo para permitir .

    
por 15.08.2013 / 07:00