コードブロックのインデントと一致するようにheredocをインデントすることはできません。

コードブロックのインデントと一致するようにheredocをインデントすることはできません。

スクリプトに「第1世界問題」があったら、まさにこれでした。

更新中のスクリプトには次のコードがあります。

if [ $diffLines -eq 1 ]; then
        dateLastChanged=$(stat --format '%y' /.bbdata | awk '{print $1" "$2}' | sed 's/\.[0-9]*//g')

        mailx -r "Systems and Operations <sysadmin@[redacted].edu>" -s "Warning Stale BB Data" jadavis6@[redacted].edu <<EOI
        Last Change: $dateLastChanged

        This is an automated warning of stale data for the UNC-G Blackboard Snapshot process.
EOI

else
        echo "$diffLines have changed"
fi

スクリプトは問題なく電子メールを送信しますが、mailxコマンドはifステートメント内にネストされているため、2つのオプションがあるようです。

  1. EOI新しい行に移動してインデントモードを中断するか、
  2. インデントを維持しますが、echoステートメントのようなものを使用してmailxが自分の電子メールを吸収できるようにします。

私はheredocの代替案を開いていますが、この問題を解決する方法がある場合は、これが私が好む構文です。

ベストアンサー1

here-doc演算子をに変更できます<<-。その後、ここから文書をインデントできます。と区切り記号タブ付き:

#! /bin/bash
cat <<-EOF
    indented
    EOF
echo Done

気づくタグを使用する必要があります。、スペースの代わりに文書をインデントして区切ります。これは上記の例が再現されないことを意味します(Stack Exchangeはタブをスペースに置き換えます)。最初の区切り文字の周りに引用符を追加すると、パラメータEOF拡張、コマンド置換、および算術拡張は適用されません。

おすすめ記事