두 개의 앰퍼샌드와 세미콜론이 bash에서 어떻게 작동합니까?


71

한 줄에 두 개의 별도 명령을 실행하려면 다음과 같이하십시오.

cd /home; ls -al

아니면 이거:

cd /home && ls -al

그리고 나는 같은 결과를 얻습니다. 그러나이 두 가지 방법으로 백그라운드에서 무슨 일이 일어나고 있습니까? 그들 사이의 기능적 차이점은 무엇입니까?

답변:


88

;또 다른에서 하나 개의 명령을 분리한다. 는 &&이전이 성공하는 경우에만 다음 명령을 실행 말한다

cd /home; ls -al

이 명령 cd /homecd명령이 실패 하더라도 ( /home존재하지 않고 통과 할 수있는 권한이없는 등) 실행 ls -al됩니다.

cd /home && ls -al

이것은 성공한 ls -al경우 에만 실행됩니다 cd /home.


2
예를 들어 of를 사용하는 ; 것은 정말 위험합니다 (적어도 rm 명령 사용) cd /some/dir; rm -fr ./*. 따라서 그러한 파괴적인 조작으로 rm을 실행하기 전에 올바른 위치에 있는지 확인해야합니다. 올바른 명령은cd /some/dir && rm -fr ./*
ALex_hha

70
a && b

경우 반환 종료 코드를 제로, 다음 B가 실행됩니다.

a || b

a 가 0이 아닌 종료 코드를 반환 하면 b 가 실행됩니다.

a ; b

a 가 실행 된 다음 b 가 실행됩니다.


16
cd /fakedir; ls -al

실패 ls하므로 현재 디렉토리에서 실행 되며 cd /fakedir쉘은 0이 아닌 종료 상태를 무시합니다.

cd /fakedir && ls -al

때문에 &&이전 명령이 정상적으로 (제로의 상태)을 종료하는 경우 운영자만을 계속 어떠한 ls동작이 수행되지 않는다.

&프로세스를 배경 으로 하는 다른 연산자 가 있습니다. 종종 명령의 끝에 배치되지만 체인의 중간에 놓을 수 있습니다.


4

if..then..else체인 연결 명령 논리 처럼 함께 결합 할 수도 있습니다 .

예:

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