1行のコマンドは長いですが、これがエラーを引き起こす部分です。
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 `;'
答え1
シェルスクリプトのセミコロンまたはアンパサンド(;
または&
)はコマンドターミネーターです。コマンドに従わないと使用できません。;
これは、「前のコマンドをフォアグラウンドで実行」を意味し、&
「前のコマンドをバックグラウンドで実行」を意味します。
シェルスクリプトの改行文字は「弱い」コマンドターミネーターです。終了コマンドがある場合は、セミコロンと同じです。終了コマンドがなければ、改行文字は何の効果もありません。
次の改行文字はコマンドをcat <<EOT >> /home/$user/public_html/.htaccess
終了します。cat …
したがって、here-documentの後にセミコロンで終わることはありません。 (here-documentはコマンドではありません。here-documentは前の行のコマンドであるcommandに追加されます。cat …
)セミコロンでコマンドを明示的に終了するには、cat …
そのコマンドをステートメントの末尾に入れる必要があります。ラインcat …
。