“final inesperado do arquivo” no script bash

5

Eu tenho isso se em um script bash:

if [ $ACTION = deploy ]; then
    ${JAVA_HOME}/bin/java ${JVM_ARGS} weblogic.WLST << EOJ
    connect('XXX','XXX','t3://XXX:8001')
    jndi();
    ls();
    disconnect();
    exit ();
    EOJ
else
    echo "XXX"
fi

Acho que o erro está no EOJ, mas não consigo descobrir como corrigi-lo, não sou tão bom em scripts bash.

    
por ludiegu 16.05.2012 / 09:07

1 resposta

8

EOJ precisa ser totalmente justificado à esquerda, ou seja. sem espaço em branco à esquerda e sem espaço à direita. Além disso, você pode / deve (dependendo de suas necessidades) escrever o primeiro como <<'EOJ' . As citações desativam alguma expansão do shell que pode ocorrer de outra forma.

De info bash

Here Documents This type of redirection instructs the shell to read input from the current source until a line containing only delimiter (with no trailing blanks) is seen. All of the lines read up to that point are then used as the standard input for a command.

   The format of here-documents is:

          <<[-]word
                  here-document
          delimiter

   No  parameter expansion, command substitution, arithmetic expansion, or
   pathname expansion is performed on word.  If any characters in word are
   quoted,  the  delimiter is the result of quote removal on word, and the
   lines in the here-document are not expanded.  If word is unquoted,  all
   lines  of  the here-document are subjected to parameter expansion, com‐
   mand substitution, and arithmetic expansion.  In the latter  case,  the
   character  sequence  \<newline> is ignored, and \ must be used to quote
   the characters \, $, and '.

   If the redirection operator is <<-, then all leading tab characters are
   stripped  from  input  lines  and  the line containing delimiter.  This
   allows here-documents within shell scripts to be indented in a  natural
   fashion.
    
por 16.05.2012 / 09:12