쉘 스크립트의 세미콜론에 구문 오류가 있습니다.

쉘 스크립트의 세미콜론에 구문 오류가 있습니다.

한 줄 명령은 더 길지만 이것이 오류를 발생시키는 부분입니다.

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 ….

관련 정보