Como anexar várias linhas a um arquivo sem a última nova linha?

6

Eu tenho uma string muito longa que é dividida em partes. Eu quero anexá-los a um arquivo sem colocar o caractere de nova linha usando o bash.

Exemplo:
Primeiro anexe

cat >> abc.sh << EOL
echo "bla bla"
ifcon
EOL

Segundo anexo

cat >> abc.sh << EOL
fig -a
uname -a
EOL

E o arquivo abc.sh deve ser:

echo "bla bla"
ifconfig -a
uname -a

e não

echo "bla bla"
ifcon
fig -a
uname -a

Como posso conseguir isso?

    
por octavian1001 14.01.2014 / 13:35

2 respostas

4

<< sempre inclui uma nova linha à direita (exceto por um documento vazio aqui).

Você precisa fazer o seguinte:

printf %s 'echo "bla bla"
ifcon' >> file

Ou use um comando que remova o caractere de nova linha à direita em vez de cat :

awk '{printf "%s", l $0; l=RT}' << EOF >> file
echo "blah bla"
ifcon
EOF

(ou perl -pe'chomp if eof' )

Ou, onde aqui-documentos são implementados com arquivos temporários ( bash , zsh , pdksh , AT & T ksh , Bourne, não mksh , dash nem yash ), nos sistemas GNU / Linux, você poderia fazer:

{ truncate -s-1 /dev/stdin && cat; } << EOF >> file
echo "blah bla"
ifcon
EOF
    
por 14.01.2014 / 13:40
1

Use echo com a opção -n:

 echo -n "blah blah" >> file
    
por 21.08.2014 / 16:47