![bash에서 세미콜론 일시 중지](https://linux55.com/image/136321/bash%EC%97%90%EC%84%9C%20%EC%84%B8%EB%AF%B8%EC%BD%9C%EB%A1%A0%20%EC%9D%BC%EC%8B%9C%20%EC%A4%91%EC%A7%80.png)
이 쉘 스크립트는 왜 다음과 같이 동작합니까?
$ 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
.echo
curl