Erro de sintaxe em um ponto-e-vírgula em um script de shell

7

O comando one liner será mais longo, mas esta é a parte que está causando o erro.

for user in natural1 ; do 
cat <<EOT >> /home/$user/public_html/.htaccess
<FilesMatch "wp-login.php">
AuthType Basic
AuthName "Secure Area"
AuthUserFile "/home/$user/.htaccesspasswd"
require valid-user
</FilesMatch>
EOT
; done

-bash: syntax error near unexpected token ';'
    
por JCats 26.06.2015 / 19:30

1 resposta

11

Um ponto-e-vírgula ou e comercial ( ; ou & ) em um script de shell é um terminador de comando. Você não pode usá-lo se não seguir um comando. ; significa "executar o comando anterior em primeiro plano" e & significa "executar o comando anterior em segundo plano".

Uma nova linha em um script de shell é um terminador de comando "fraco". Se houver um comando para terminar, é equivalente a um ponto e vírgula. Se não houver comando para finalizar, a nova linha não terá efeito.

A nova linha após cat <<EOT >> /home/$user/public_html/.htaccess termina o comando cat … . Então o ponto e vírgula após o documento aqui não tem nada para terminar. (Um documento aqui não é um comando; o documento aqui é anexado ao comando na linha anterior, ou seja, o comando cat … .) Se você quisesse encerrar explicitamente o comando cat … com um ponto-e-vírgula, você precisa colocá-lo no final da linha cat … .

    
por 27.06.2015 / 16:02