콘솔에서 명령을 어떻게 연결합니까? 직렬로 실행하고 새 명령을 입력하기

에서 bash때로는 여러 명령을 직렬로 실행하고 새 명령을 입력하기 전에 명령이 완료되기를 기다리지 않습니다. 그래서 나는 이런 식으로합니다 :

cmd1; cmd2; cmd3

불행하게도, 명령 중 하나가 실패 할 수 있습니다. 이 경우에는 중지하고 싶습니다. 이 작업을 수행하는 쉬운 방법이 있습니까?하지만 이전 명령에 0 종료 코드가있는 경우에만 명령을 계속 실행하도록 만드십시오.



답변

&&연산자 사용

cmd1 && cmd2 && cmd3

shellscripting에서 &&||연산자 C. 된 논리 연산자의 최적화 된 구현 후 모델링 &&수단 및 조작자 및 ||수단 OR. 유닉스는 C와 밀접하게 관련되어 있으며 C에서는 논리 연산자의 두 번째 피연산자가 결과가 첫 번째 피연산자로부터 이미 알려진 경우 평가되지 않습니다. 예를 들면 "false && x"이다 false어떤을 위해 x, 그래서 평가를 할 필요가 없습니다 x(특히 x함수 호출됩니다) 비슷합니다 "true || x". 이를 단락 시맨틱 이라고도 합니다.

유닉스에서는 명령의 반환 값을 “성공적인 완료”진실 값으로 해석하는 것이 일반적입니다. 종료 코드 0은 true(성공), 0이 아닌 의미 false(실패)를 의미 합니다. 따라서 첫 번째 명령이 cmd1 && cmd2리턴 되면 "false"(제로가 아닌 종료 상태, 실패를 나타냄) 복합 명령의 상태는 실패입니다. 따라서 cmd1 && cmd2 “execute cmd1, ANDNN (실패하지 않은 경우) ” 으로 해석 cmd2됩니다. 질문에서 기본적으로 원하는 것은 무엇입니까?

OR :와 마찬가지로 cmd1 || cmd2“execute cmd1, OR IF failure “로 해석 될 수 있습니다 cmd2.


팁 : 더 긴 체인을 사용하려면 스크립트를 &&넣는 것이 set -e좋습니다. 기본적으로 세미콜론 은 몇 가지 특수한 경우 ;로로 바뀝니다 &&.


답변

“채 이닝 명령으로 그룹화”

ping 192.168.0.1 || { echo "ping not successful"; exit 1; }

ping은 성공하지 못한 경우에만 체인으로 묶인 명령 그룹을 괄호 안에 실행합니다.

주의:

목록은 “;”으로 끝나야합니다.

대괄호와 그룹화 된 명령 사이에는 공백이 있어야합니다!


답변

&&운영자 와 간단하게 . 예를 들어 :

cmd1 && cmd2 && cmd3

명령 중 하나가 실패하면 (0 이외의 종료 값을 반환) 다른 명령은 실행되지 않습니다.