Por que bash está confundindo esta cadeia de limite HEREDOC como um comando?

0

Estou tentando usar blocos HEREDOC aninhados em um script bash.
Nota

  • O HEREDOC externo é o usuário para executar uma lista de comandos como um usuário diferente via sudo
  • o HEREDOC interno está capturando texto normal para cat em um arquivo.
# 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 

Quando esse script é executado, a saída é:

/bin/bash: line 229: EOF: command not found

Por que o bash acha que EOF é um comando e não a string de delimitação HEREDOC

  • Não tenho certeza se os espaços em branco entre o início das linhas e as strings limite são importantes. Se sim, deixe-me saber e tentarei explicar

update: aqui está uma versão simplificada do script que tem código executável copy and pastable - que parece produzir o mesmo erro ish

#! /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

erro de saída é:

/bin/bash: line 22: warning: here-document at line 8 delimited by end-of-file (wanted 'VRC')

    
por the_velour_fog 09.08.2015 / 04:46

1 resposta

5

Existe um espaço depois de VRC . Remova-o.

    
por 09.08.2015 / 05:40