Um documento aqui é um redirecionamento do formulário:
<<[-]DELIMITER
....
....
....
DELIMITER
O opcional -
(dentro dos parênteses acima) muda a maneira como o delimitador é correspondido e permite recuar cada linha dentro do conteúdo heredoc, com tabulações (sem espaços permitidos).
-
"Corresponde" significa que o delimitador é correspondido ao abridor (como quando
DELIMITER
corresponde a<<DELIMITER
ou<<-DELIMITER
, por exemplo). -
Observe que você pode usar um ou mais espaços entre
<<
ou<<-
e a palavra a seguir).
Então, para resumir as leis básicas para correspondência dentro de um singlar heredoc:
- O abridor deve ser colocado no início da linha em uma sintaxe aplicável.
- O delimitador deve ser a única palavra de sua linha.
- Todo o conteúdo sob o abridor (incluindo o delimitador) pode ser recuado com qualquer número de tabulações , com a sintaxe
<<-DELIMITER
.
Já que com a sintaxe anterior, nenhum espaço em branco pode preceder o opener heredoc, se você quiser recuá-lo, sua única escolha é usar a seguinte sintaxe e você deve usar exclusivamente tabulações no início de cada linha dentro do conteúdo do heredoc.
Agora você tem duas opções com a sintaxe <<-
.
Primeira opção
Use a sintaxe <<-
para o heredoc interno.
bash << APACHE
...
...
cat <<- MOD_REWRITE
⇨ ...
⇨ ....
⇨ MOD_REWRITE
...
...
APACHE
(indentação é de 4 espaços, tabulações são simbolizadas com ⇨
)
O código visto por bash
será exatamente o que está escrito na sua tela (por exemplo, bash
verá o recuo de cada linha como você a vê agora). Quando o heredoc interno é atendido, devido à sintaxe <<-
, bash
removerá os caracteres de tabulação que levam cada linha até o delimitador MOD_REWRITE.
Segunda opção
Use a sintaxe <<-
para o heredoc externo.
bash <<- APACHE
⇨ ...
⇨ ...
⇨ cat << MOD_REWRITE
⇨ ⇨ ...
⇨ ⇨ ....
⇨ MOD_REWRITE
⇨ ...
⇨ ...
APACHE
Desta vez, o código visto por bash
será diferente do que você vê: ele não conterá nenhuma tabulação principal. É por isso que não é um problema usar a sintaxe <<
para o heredoc interno: o delimitador MOD_REWRITE estará no início da linha.
Em ambos os casos, o delimitador MOD_REWRITE é reconhecido e seu arquivo de configuração do Apache /etc/apache2/apache2.conf
não é recuado. Se você quiser recuar partes dela, sua única opção é usar espaços (após as tabulações iniciais que serão removidas).
Naturalmente, há uma terceira opção: usar a sintaxe <<-
para ambos os heredocs, mas isso não alterará nada da opção 2, pois todas as tabulações principais serão removidas quando o código for enviado para bash
.