bash에서 세미콜론 일시 중지

bash에서 세미콜론 일시 중지

이 쉘 스크립트는 왜 다음과 같이 동작합니까?

$ curl -d "asd" 0.0.0.0/abc & echo "abc";

enter다시 쉘에 들어가기 전에 그것을 눌러야 한다는 것이 밝혀졌습니다. 이는 curl간단한 웹 서버에 대한 게시 요청일 뿐이며 abc.

그러나 이 스크립트에서는 쉘에 다시 들어가기 전에 Enter 키를 누를 필요가 없습니다.

$ echo "abc" & echo "abc"

답변1

&명령을 curl백그라운드로 보내면 실행하는 동안 백그라운드에서 실행됩니다. 쉘은 이를 기다리지 않습니다(작업 번호와 PID가 인쇄됩니다). 대신 쉘은 계속 실행됩니다. echo아마도 내장되어 있기 때문에 실행하는 것보다 더 빠를 것입니다. curl따라서 쉘이 종료 echo되고 프롬프트가 인쇄됩니다.앞으로 curl모든 출력을 생성합니다.

예를 들어 Bash를 사용하여 얻은 결과는 다음과 같습니다.

bash ~ $ curl -d "asd" 0.0.0.0/abc & echo "abc";
[1] 26757
abc
bash ~ $ curl: (7) Failed to connect to 0.0.0.0 port 80: Connection refused

마지막 줄 시작 부분에 힌트가 있습니다.

여기를 클릭하면 Enter셸이 또 다른 프롬프트를 인쇄합니다. 이 시점에서 백그라운드 작업이 완료되었는지 확인하고 관련 설명을 인쇄합니다.

[1]+  Exit 7                  curl -d "asd" 0.0.0.0/abc
bash ~ $ 

이제 정확히 무엇을 하고 있는지 잘 모르겠지만 백그라운드 작업을 터미널에 인쇄하는 것은 약간 어색하므로 curl출력을 다른 곳으로 리디렉션하거나 포그라운드에서 실행하는 것이 좋습니다. 예를 들어 먼저 curl something; echo curl done실행 curl한 다음 실행 echo하고, 오류가 없는 경우에만 실행합니다 curl something && echo curl done.echocurl

관련 정보