![이 명령은 스크립트(또는 -c) 내에서 작동하지만 직접 실행할 때는(대화형 셸에서) 작동하지 않습니다.](https://linux55.com/image/139048/%EC%9D%B4%20%EB%AA%85%EB%A0%B9%EC%9D%80%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8(%EB%98%90%EB%8A%94%20-c)%20%EB%82%B4%EC%97%90%EC%84%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%EB%A7%8C%20%EC%A7%81%EC%A0%91%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EB%95%8C%EB%8A%94(%EB%8C%80%ED%99%94%ED%98%95%20%EC%85%B8%EC%97%90%EC%84%9C)%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
이것은 작동합니다:
$ bash -c 'while true; do echo foo; sleep 1; done'
foo
foo
...
하지만 이건 아니다:
$ while true; do echo foo; sleep 1; done
bash: syntax error near unexpected token `done'
zsh에서도 동일한 문제가 발생합니다.
zsh: '완료' 근처에서 구문 분석 오류가 발생했습니다.
참고: 대시는 유효합니다.
답변1
이와 같은 문제는 aliases
비대화형 쉘에서 비활성화되어 있다는 사실을 아는 사람이 거의 없기 때문에 종종 오해됩니다.
do
귀하의 경우에는 문제를 일으키는 것은 name이라는 별칭입니다 .
비슷한 문제를 조사하려면 일반적으로 다음 명령을 사용하여 새 셸을 시작할 수 있습니다.
HOME=/tmp $shell
그런 다음 다시 시도해 보세요. 이렇게 하면 대화형 셸이 시작 스크립트를 읽을 수 없습니다.