bashがこのHEREDOC制限文字列をコマンドで混同するのはなぜですか?

bashがこのHEREDOC制限文字列をコマンドで混同するのはなぜですか?

BashスクリプトでネストされたHEREDOCブロックを使用しようとしています。
ノート

  • 外部 HEREDOC は、ユーザーが別のユーザーとして実行するコマンドのリストです。sudo
  • cat内部的には、HEREDOCはプレーンテキストをファイルとしてキャプチャします。
# run some commands as regular user
sudo -s -u $reg_user << EOF
echo "installing Pathogen plugin manager"
mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

# start the nested HEREDOC
#-----------------------------
#
echo "configuring \.vimrc"
cat <<-VRC >> ~/.vimrc
    "
    "======================================================
    " vim core settings
    "======================================================
    "
    " show numbers - to turn off :set nonumber
    set number

    " always show status bar
    set laststatus=2
VRC # limit string to close the inner HEREDOC

echo "more bash commands"

EOF # end the outer HEREDOC - NOTE: this is also the end of the 
    # entire script itself 

このスクリプトが実行されると、出力は次のようになります。

/bin/bash: 行 229: EOF: コマンドが見つかりません。

EOFBashはなぜこれがHEREDOC区切り文字列ではないコマンドだと思いますか?

  • 行の先頭と制限文字列の間のスペースが重要かどうかはわかりません。もしそうなら、教えてくれれば説明します。

更新:以下は、実行可能なコードのコピーと貼り付けを含む単純化されたバージョンのスクリプトです。同じエラーが発生しているようです。

#! /bin/bash

# If you want to run this code you need to assign a valid user here
user="non-root user"

# run some commands as regular user
sudo -s -u $user << EOF
echo "installing plugins"
mkdir -p testdir

# start the nested HEREDOC
#-----------------------------
#
echo "configuring \.config_file"
cat <<-VRC >> /tmp/test_vimrc
    "
    "======================================================
    " vim core settings
    "======================================================
    "
    " show numbers - to turn off :set nonumber
    set number

    " always show status bar
    set laststatus=2
VRC 

echo "more bash commands"

EOF

出力エラーは次のとおりです。

/bin/bash: 22行目: 警告: ここでは、文書は8行目のファイルの末尾に区切られています(「VRC」が必要)。

ベストアンサー1

その後にスペースがありますVRC。それを削除します。

おすすめ記事