Computing

[Linux] 터미널 커맨드라인 한줄에 여러 명령어 한번에 실행시키기 본문

이것저것/CSE

[Linux] 터미널 커맨드라인 한줄에 여러 명령어 한번에 실행시키기

jhson989 2023. 1. 31. 21:06

Linux 터미널에서 여러 명령어를 순차적으로 실행시켜야 하는 경우가 있다. 예를 들면 폴더를 만들고, 그 폴더에 git을 통해 프로젝트를 다운로드받고, 다운로드받은 프로젝트를 빌드하는 경우를 생각해보자. 일반적으로 [mkdir] 명령어를 통해 폴더를 만들고, [git] 명령어를 통해 프로젝트를 다운받고, 그 이후 [make] 등의 build 명령어를 실행시켜 빌드를 할 것이다. 

 

이때 [git] 명령어가 끝날 때까지 기다린 후 [make] 명령어를 직접 처줘야하는데, 문제는 [git] 명령어가 오래 걸리면 나의 대기시간이 길어진다. 이럴 경우 명령어들을 순차적으로 실행하도록 shell script를 짤 수도 있지만, 터미널 커맨드라인에서 여러 명령어를 순차적으로 한번에 실행시킬 수도 있다.

 

커맨드라인 한줄에 여러 명령어를 순차적으로 실행시키는 방법은 다음 3가지가 있다:

 

1) ;

# cmd1; cmd2; cmd3
mkdir hello ; git clone https://abc.com ; make

 

cmd1, cmd2, cmd3를 순차적으로 실행시킨다. 이때 앞선 cmd가 어떻게 끝나던 상관없이 다음 cmd를 실행한다.

 

 

2) &&

# cmd1 && cmd2 && cmd3
mkdir hello && git clone https://abc.com && make

 

앞서 실행된 cmd가 성공적으로 끝나야 다음 cmd를 실행한다. 명령어(=CLI 프로그램)의 exit code가 0이면 명령어는 성공적으로 끝난 것이다.

 

 

3) ||

# cmd1 || cmd2 || cmd3
mkdir hello || echo "Failed"

 

앞서 실행된 cmd가 실패하여야 다음 cmd를 실행한다. 명령어의 exit code가 0이 아닌 다른 숫자이면 명령어는 실패한 것이다.

 

 

활용

&& 와 || 을 이용해 다음과 같은 표현이 가능하다.

 

cmd && <성공 시 cmd> || <실패 시 cmd>

 

예를 들어 어떤 프로그램의 exit code가 0이면 [Succeeded]를, 1이면 [Failed]를 출력하도록 다음과 같이 작성할 수 있다.

 

# python cmd.py의 Exit code가 1이면
$ python cmd.py && echo "Succeeded" || echo "Failed" 
Failed

# python cmd.py의 Exit code가 0이면
$ python cmd.py && echo "Succeeded" || echo "Failed"
Succeeded