web-dev-qa-db-ja.com

最後の改行なしでファイルに複数の行を追加する方法は?

チャンクに分割された非常に長い文字列があります。 bashを使用して改行文字を入れずにファイルに追加したい。

例:
最初の追加

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

2番目の追加

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

そして、ファイルabc.shは次のようになります:

echo "bla bla"
ifconfig -a
uname -a

ではなく

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

どうすればこれを達成できますか?

6
octavian1001

<<は常に後続の改行を含みます(空のhereドキュメントを除く)。

次のいずれかを行う必要があります。

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

または、catではなく、末尾の改行文字を削除するコマンドを使用します。

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

(またはPerl -pe'chomp if eof'

または、ヒアドキュメントが一時ファイルで実装されている場合(bashzshpdksh、AT&T kshmkshではなくBourne 、dashyash)も、GNU/Linuxシステムでは次のように実行できます。

{ 
  chmod u+w /dev/stdin && # only needed in bash 5+
    truncate -s-1 /dev/stdin &&
    cat
} << EOF >> file
echo "blah bla"
ifcon
EOF
4

-nスイッチでechoを使用します。

 echo -n "blah blah" >> file
1
h22