单行命令会更长,但这是引发错误的部分。
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
shell 脚本中的分号或与号 (;
或&
) 是命令终止符。如果它不遵循命令,则无法使用它。;
意思是“在前台运行前面的命令”,&
意思是“在后台运行前面的命令”。
shell 脚本中的换行符是“弱”命令终止符。如果有终止命令,则相当于分号。如果没有终止命令,则换行符无效。
后面的换行符cat <<EOT >> /home/$user/public_html/.htaccess
终止cat …
命令。因此,here-document 后面的分号没有任何内容可以终止。(here-document 不是命令;here-document 附加在前一行的命令上,即命令cat …
。)如果您想cat …
用分号明确终止命令,则需要将其放在行末cat …
。