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. 그것을 제거.

관련 정보