21 오류가 발생했습니다. bash : 예기치 않은 토큰 근처의 구문 오류`; ' 다음 명령으로 인해 : evince foo.pdf bar.pdf &; emacs foo.tex & 백그라운드 작업 을 ;할 때 명령을 분리하는 것이 불법 &입니까? 아니면 이것이 작동하지 않는 또 다른 이유가 있습니까? 감사합니다. linux bash — DQdlM 소스
40 세미콜론이 필요하지 않습니다. 배경으로 보낸 후에는 다른 명령을 자유롭게받을 수 있습니다. evince foo.pdf bar.pdf & emacs foo.tex & — 테오 소스 2 이것은 2 시간의 맹세 후에 if 문으로 도움이되었습니다. 누군가 이것을 if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; then nohup sleep 5 > /dev/null 2>&1</dev/null & fi — 원한다면
13 BTW의 핵심 문제는 (Bourne-derived) 쉘이 빈 명령을 허용하지 않는다는 것입니다. ";" "&"는 명령 종결 자이며 각각 fg와 bg를 의미합니다. 그래서 ";;" (또는 줄의 시작 부분에 ";")도 유효하지 않습니다. (아직 종료되지 않은 명령이있는 경우 줄 바꾸기를 계속하기 위해 "\"를 사용하지 않는 한 줄 바꿈은 ";"을 의미합니다.) 언어는 다음 정책에 따라 크게 다릅니다. C 파생 언어는 빈 문장을 허용합니다. 파스칼과 PERL에는 터미네이터가 아닌 세퍼레이터가 있습니다. — AR 소스
-3 아니요, 혼란스럽고 의미하는 바를 제대로 해결할 수 없습니다. 백그라운드에 넣고 자하는 명령으로 &를 그룹화해야합니다. $ (evince foo.pdf bar.pdf &); emacs foo.tex & 잘 작동합니다. 더 명백한 것은 다음과 같습니다. $ (evince foo.pdf bar.pdf &); (emacs foo.tex &) 특히 종료 후 더 많은 명령을 연결하려는 경우 특히 그렇습니다. — 마 젠코 소스 1 불필요한 세미콜론 사용을 정당화하기 위해 서브 쉘을 생성 할 필요가 없습니다. 괄호는 단순한 구문이 아닙니다. 그들은 추가 작업을 수행합니다. — chepner 2016 년
if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; then nohup sleep 5 > /dev/null 2>&1</dev/null & fi