set-o errexitがこの読み取り/heredoc式を中断するのはなぜですか?

set-o errexitがこの読み取り/heredoc式を中断するのはなぜですか?

私は以下のパターンを使用してbashスクリプトの端末に複数行のメッセージを印刷しました。

read -d '' message <<- EOF
    this is a 
    mulitline
    message
EOF
echo "$message"

これは働いていました。数日前まではモード動作が中断されました。動作を停止するということは、bashがスクリプトでこれらの区切り文字表現を見つけたときに何もしないようで、出力がないことを意味します。
過去数日間に私が考えることができる唯一の変更は、スクリプトが実行される環境が「フル」インストールではなく、Ubuntu 14.04ライブUSBであるということです。その後、スクリプトステートメントの前に
heredocを移動すると、再び機能し始めることがわかりました。set -o errexitつまり、これは機能しません

#!/bin/bash

set -o errexit

read -d '' message <<- EOF
    this is a 
    mulitline
    message
EOF

echo "$message"

結果:(何も)
しかしこれは実際に働く

#!/bin/bash

read -d '' message <<- EOF
    this is a 
    mulitline
    message
EOF

echo "$message"

結果

$ sudo ./script.sh 
this is a 
mulitline
message
  • バッシュ --バージョン-GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)

ベストアンサー1

read区切り文字が見つからない場合は、ゼロ以外の終了ステータスが返されます。区切り文字を空の文字列に設定した後、通常はテキストファイルに見つからないNULバイトを区切り文字として使用します。

おすすめ記事