이유는 무엇 ; bash에서 예기치 않은 토큰 오류를 반환하고 반환합니까? 토큰 근처의 구문 오류`;

오류가 발생했습니다.

bash : 예기치 않은 토큰 근처의 구문 오류`; ‘

다음 명령으로 인해 :

evince foo.pdf bar.pdf &; emacs foo.tex &

백그라운드 작업 을 ;할 때 명령을 분리하는 것이 불법 &입니까? 아니면 이것이 작동하지 않는 또 다른 이유가 있습니까?

감사합니다.



답변

세미콜론이 필요하지 않습니다. 배경으로 보낸 후에는 다른 명령을 자유롭게받을 수 있습니다.

evince foo.pdf bar.pdf & emacs foo.tex &

답변

BTW의 핵심 문제는 (Bourne-derived) 쉘이 빈 명령을 허용하지 않는다는 것입니다.

“;” “&”는 명령 종결 자이며 각각 fg와 bg를 의미합니다. 그래서 “;;” (또는 줄의 시작 부분에 “;”)도 유효하지 않습니다.

(아직 종료되지 않은 명령이있는 경우 줄 바꾸기를 계속하기 위해 “\”를 사용하지 않는 한 줄 바꿈은 “;”을 의미합니다.)

언어는 다음 정책에 따라 크게 다릅니다.

C 파생 언어는 빈 문장을 허용합니다.

파스칼과 PERL에는 터미네이터가 아닌 세퍼레이터가 있습니다.


답변

아니요, 혼란스럽고 의미하는 바를 제대로 해결할 수 없습니다.

백그라운드에 넣고 자하는 명령으로 &를 그룹화해야합니다.

$ (evince foo.pdf bar.pdf &); emacs foo.tex &

잘 작동합니다. 더 명백한 것은 다음과 같습니다.

$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)

특히 종료 후 더 많은 명령을 연결하려는 경우 특히 그렇습니다.