複数行の文字列をファイルに反映するネストされたインデントされたステートメントがある場合、元のシェル(私の場合はbash)のインデントがターゲットファイルに送信されます。
これを防ぐために、エコーされた出力からインデントを削除しましたが、ソースコードからインデントされたコード形式は失われます。例:
#! /bin/bash
function configure_default_vhost() {
case "$2" in
[--production])
echo "<VirtualHost *:80>
# These lines are "breaking" out of the preffered indenting
redirect 404 /
ErrorDocument 404
</VirtualHost>
" > /etc/apache/sites-availabe/000-default.conf
esac
}
私の目標は、できるだけ次のようなものを得ることです。
#! /bin/bash
function configure_default_vhost() {
case "$2" in
[--production])
echo "<VirtualHost *:80>
# These lines are aligned with the preffered indenting
redirect 404 /
ErrorDocument 404
</VirtualHost>
" > /etc/apache/sites-availabe/000-default.conf
esac
}
(注:この質問はHEREDOCに関する質問と重複する可能性があると記載されています。この質問に答えるべき正しい場所がどこにあるのかわからないので、ここに入力します(そうでない場合はお知らせください)。コードブロックのインデントに関するものです。heredocはこれを行ういくつかの方法の1つです。実際にheredocは私が望む解決策ではありません。
ベストアンサー1
修飾子と一緒に「here-document」を使用できます-
。タブを使用してインデントできます。echo
からに切り替える必要がありますcat
。
cat <<-EOF > /etc/apache/sites-availabe/000-default.conf
<VirtualHost *:80>
redirect 404 /
ErrorDocument 404
</VirtualHost>
EOF
あるいは、結果でタブを保持するには、HERE文書を前処理してsed
4つのスペースにインデントすることもできます。
sed 's/^ //' <<EOF
....{
....(------)func () {
....(------)return
....(------)}
....}
EOF
スクリプトの書式設定方法を示すために、スペースとタブの.
代わりにスペースとタブを使用しました。(------)