Como faço para imprimir uma variável sem alterar se ela tem uma nova linha ou não em um script de shell?

1

Eu tenho um script de shell que recebe entrada de outro script de shell. O fluxo é canalizado em stdin.

Eu preciso capturar todos os bytes do fluxo de stdin para uma única variável no script de shell. Em seguida, execute algumas operações e envie-o de volta para a stdout.

O problema que tenho é que às vezes há um caractere de nova linha à direita no arquivo de entrada, mas às vezes não existe. Se não houver, então não quero adicionar um. Se houver uma nova linha à direita, no entanto, quero preservar isso.

O problema é que não importa o que eu tente, o sistema sempre gera SEM uma nova linha à direita (como no caso de printf ) ou sempre gera uma nova linha (como no caso de echo ).

Por favor, diga-me qual é o nome de um processo (não echo ou printf ) que simplesmente pega uma variável e a transmite, textualmente, byte para byte, sobre stdout. Eu tentei todas as opções possíveis para printf e nenhum deles funciona para preservar novas linhas à direita.

Obrigado.

    
por CommaToast 09.09.2014 / 01:14

2 respostas

0

echo -e "$ var" irá produzir novas linhas. Talvez você tenha esquecido as cotações? Sempre mostre o que você tentou ao fazer essas perguntas.

    
por 09.09.2014 / 09:19
0

A solução final que usei no meu código é a seguinte:

function filter() {
    #do lots of sed operations
    #see https://github.com/gistya/expandr for full code
}

GIT_INPUT='cat; echo x'
FILTERED_OUTPUT=$(printf '%s' "$GIT_INPUT" | filter)
FILTERED_OUTPUT=${FILTERED_OUTPUT%x}
printf '%s' "$FILTERED_OUTPUT"
    
por 10.09.2014 / 16:29