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