콘솔에서 명령을 어떻게 연결합니까?


23

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

cmd1; cmd2; cmd3

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


다음은 유닉스 SE 의 훌륭한 답변 입니다.
NonlinearFruit

답변:


39

&&연산자 사용

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좋습니다. 기본적으로 세미콜론 은 몇 가지 특수한 경우 ;로로 바뀝니다 &&.


1
설명을위한 +1||
Alp

첫 번째 명령의 상태가 무엇이든 연결할 수 있습니까? (성공 또는 실패)
Hugo Trentesaux

@HugoTrentesaux 무슨 뜻인가요? .. 성공 / 실패 결과 또는 A || B[단락] 논리 A OR B와 동일 합니다. A || B성공을A이었다 성공 , 또는 때 A이었다 실패 했지만 B이었다 성공 ; 하고 A || B있다 실패 할 때 A이었다 실패를 하고 B있었다 failure. 와 마찬가지로 &&논리 AND를 따릅니다.
ulidtko

쉘 컨텍스트에서 A가 실패하거나 성공하더라도 A를 실행 한 다음 B를 어떻게 실행할 수 있습니까?
Hugo Trentesaux

1
@HugoTrentesaux는 ;기본적으로 일반 규칙 (또는 줄 바꿈)이 수행하는 작업입니다. 대략 말하기 로 set -e변 합니다. [기본값]은 다음과 같이 말합니다 : run , no-matter-what run . ;&&set +eA; BAB
ulidtko

13

"채 이닝 명령으로 그룹화"

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

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

주의:

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

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


6

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

cmd1 && cmd2 && cmd3

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.