이유는 무엇 ; bash에서 예상치 못한 토큰 오류를 반환한 후?

이유는 무엇 ; bash에서 예상치 못한 토큰 오류를 반환한 후?

오류가 발생했습니다.

bash: 예상치 못한 토큰 `;' 근처에 구문 오류가 있습니다.

다음 명령으로 인해:

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

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

감사합니다.

답변1

세미콜론은 필요하지 않습니다. 백그라운드로 전송된 후에는 자유롭게 다른 명령을 받을 수 있습니다.

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

답변2

그런데 핵심 문제는 (Bourne 파생) 쉘이 빈 명령을 허용하지 않는다는 것입니다.

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

(새 줄은 "\"를 사용하여 줄을 계속하지 않는 한 아직 종료되지 않은 명령이 있는 경우 ";"을 의미합니다.)

이러한 정책에서는 언어가 많이 다릅니다.

C 파생 언어에서는 빈 명령문을 허용합니다.

Pascal과 PERL에는 종결자가 아닌 구분자가 있습니다.

답변3

아니요, 혼란스러워서 무슨 뜻인지 제대로 이해하지 못할 뿐입니다.

백그라운드에 넣으려는 명령과 함께 &를 그룹화해야 합니다.

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

잘 작동합니다. 더욱 명시적인 내용은 다음과 같습니다.

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

특히 종료 후에도 더 많은 명령을 연결하고 싶다면 더욱 그렇습니다.

관련 정보