영호
[CLI] Linux CLI |(pipe), ||(or) 본문
들어가며
이번 글에서는 제가 프로젝트를 진행하며 에러를 수정하다 알게 된 CLI 관련된 | 연산과 || 연산의 차이에 대해 포스팅해보겠습니다.
에러 발생 상황
- jenkins의 pipeline과 docker를 이용해 프로젝트 배포를 진행하는 상황.
- 배포의 마지막 과정에서 Docker이미지를 실행하기 전, 아래 코드로 이미 실행 중이던 컨테이너가 존재하면 중지 및 삭제하는 명령어 실행.
docker ps -a -q --filter name={container} | grep -q . && docker stop {container}&& docker rm {container} | true
- 그러나 해당 명령어에서 에러가 발행하면서 배포가 이루어지지 않음.
grep명령에서 -q 옵션은 출력을 하지 않는 옵션입니다.
| (pipe연산)
사용법
- 이전 명령어의 output이 |(pipe) 연산으로 인해 다음 명령어의 input으로 들어갑니다.
- 아래 코드처럼 명령어 사이에 | 연산을 집어넣어서 사용합니다.
command1 | command2
예제
- test.txt
test
qwer
test
qwer
위와 같이 test.txt가 작성되어있는 상황에서 예제를 진행해보겠습니다.
cat test.txt | head -2
출력
test
qwer
cat test.txt의 output이 head -2의 input으로 들어가면서 젤 위 2행만 출력이 되는 것을 볼 수 있습니다.
|| (if else)
|| 연산은 저희가 알고 있는 if else와 매우 흡사합니다.
사용법
- 만약 command1이 정상적으로 수행된다면 command2는 수행되지 않지만,
- command1이 정상적으로 수행되지 않으면 command2가 수행됩니다.
- 아래와 같은 형식으로 사용할 수 있습니다.
command1 || command2
예제
echo true || echo false
>>> true
- echo true가 정상적으로 수행되기 때문에 true만 출력됩니다.
false || echo else
>>> else
- 앞이 false라 뒤에 있는 echo else가 수행되면서 else가 출력됩니다.
에러 해결
docker ps -a -q --filter name={container} | grep -q . && docker stop {container}&& docker rm {container} || true
- 마지막에 pipe라인으로 이루어진 것을 or연산으로 수정했습니다.
- 만약 실행 중인 컨테이너 목록 중 찾는 컨테이너가 없을 경우 끝 부분의 || true로 인해 다음 명령어가 정상적으로 수행됩니다.
'개발지식' 카테고리의 다른 글
AOP와 Multi-Datasource를 활용해 동시성 문제 해결해보기 2탄(feat. NamedLock) (4) | 2023.11.15 |
---|---|
AOP와 Multi-Datasource를 활용해 동시성 문제 해결해보기 1탄(feat. NamedLock) (3) | 2023.11.14 |
[개발지식] Library vs Framework (0) | 2022.05.17 |
Comments