&&와;의 차이점은 무엇인가요? 수면은 언제 배경으로 분기됩니까?

&&와;의 차이점은 무엇인가요? 수면은 언제 배경으로 분기됩니까?

지금 막 나는질문을 했다백그라운드에서 잠자기 프로세스를 분기하는 것과 관련됩니다.
내가 직접 생각해낸 표기법은 다음과 같습니다.

sleep 10 && echo "hello world" &

이 답변질문마다 다른 형식을 사용하세요.

( sleep 10 ; echo "hello world" ) &

&&두 번째 프로세스 시작은 첫 번째 프로세스가 true를 반환하는 경우에만 허용된다는 것을 알고 있습니다 . 잠이 실패할 수도 있나요? 다른 것보다 하나를 선택해야 하는 상황이 있습니까?

답변1

실행 중에 절전 모드가 종료되면 절전 모드가 실패할 수 있습니다.

$ sleep 2
$ echo "$?"
0
$ sleep 2
^C
$ echo "$?"
130

sleep은 외부 실행 파일이므로 fork 또는 exec 호출도 실패할 수 있으며 이로 인해 bash는 오류 코드 >0을 생성하게 됩니다.

답변2

a; b두 번째 명령은 항상 첫 번째 명령 다음에 실행되며 a && b첫 번째 명령이 성공한 경우, 즉 첫 번째 명령이 상태 0을 반환하는 경우에만 실행됩니다.

sleep신호에 의해 종료되지 않는 한 항상 상태 0을 반환합니다. 이 경우 상태는 128 + 신호 번호입니다. ( sleep명령이 존재하지 않거나 리소스 부족으로 프로그램을 시작할 수 없는 경우 상태가 126 또는 127일 수도 있지만 이러한 상황이 발생할 가능성은 거의 없습니다.)

;따라서 수면이 중단되면 원하는 일에 따라 또는 를 사용해야 합니다 .&&

  • sleep 10; echo hello10초 후에 메시지를 인쇄합니다( sleep신호에 의해 종료되면 더 적음).
  • sleep 10 && echo hello10초 후에 메시지를 인쇄하지만, sleep신호에 의해 종료되면 아무것도 인쇄하지 않습니다.

답변3

절전 모드 실패 가능성이 매우 작더라도 다양한 이유로 모든 명령이 실패할 수 있다고 가정해야 합니다.

( sleep 10 ; echo "hello world" ) &

백그라운드 절전을 의미하고 절전 프로세스 후에 에코를 수행하지만 절전에 실패하면 에코가 어쨌든 실행됩니다. 전체 설명 보기

sleep 10 && echo "hello world" &

즉, 에코가 발생하기 전에 절전 모드가 끝날 때까지 기다려야 합니다. 에코가 실패하면 프로세스가 중지되지만 전체 명령도 백그라운드에서 실행됩니다.전체 설명 보기

결론적으로
첫 번째 구문은 쉘 스크립팅입니다. 즉, 명령을 개별적으로 목록으로 처리합니다.
두 번째 옵션은 AND에 &&를 사용하므로 첫 번째 명령이 실패할 때 이를 사용하면 두 번째 명령이 실행되지 않습니다.

오류를 처리할 때의 동작이 다를 뿐입니다.

관련 정보