如何在没有最后一个换行符的情况下将多行附加到文件中?

oct*_*001 6 io-redirection shell-script text-processing

我有一个很长的字符串,它被分成几块。我想将它们附加到文件中而不使用 bash 放置换行符。

示例:
首先追加

cat >> abc.sh << EOL
echo "bla bla"
ifcon
EOL
Run Code Online (Sandbox Code Playgroud)

第二次追加

cat >> abc.sh << EOL
fig -a
uname -a
EOL
Run Code Online (Sandbox Code Playgroud)

文件abc.sh应该是:

echo "bla bla"
ifconfig -a
uname -a
Run Code Online (Sandbox Code Playgroud)

并不是

echo "bla bla"
ifcon
fig -a
uname -a
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Sté*_*las 4

<<始终包含尾随换行符(此处的空文档除外)。

您需要执行以下任一操作:

printf %s 'echo "bla bla"
ifcon' >> file
Run Code Online (Sandbox Code Playgroud)

或者使用删除尾随换行符的命令而不是cat

awk '{printf "%s", l $0; l=RT}' << EOF >> file
echo "blah bla"
ifcon
EOF
Run Code Online (Sandbox Code Playgroud)

(或者perl -pe'chomp if eof'

或者,在 GNU/Linux 系统上,如果此处文档是使用临时文件(bashzshpdkshAT&T ksh、 Bourne、 not mkshdashnor yash)实现的,您可以执行以下操作:

{ 
  chmod u+w /dev/stdin && # only needed in bash 5+
    truncate -s-1 /dev/stdin &&
    cat
} << EOF >> file
echo "blah bla"
ifcon
EOF
Run Code Online (Sandbox Code Playgroud)