리눅스에서 여러 명령어를 한 번에 처리할 수 있게 하는 방법을 알아봅시다. 다중명령어라고도 하던데요. 간단하게 알아봅시다.

 


 먼저 ls를 입력해 보면 1.txt만 나옵니다. 이제 ls -ail을 입력해 보겠습니다.

 

 보니까 디렉토리 a는 없음을 알 수 있어요. 대신에, 1.txt가 있다는 것을 알 수 있어요. 고로, cd a는 실패하는 명령이고, cat 1.txt는 성공하는 명령입니다.

 

 cd a && ls를 입력해 보겠습니다. 이 때, cd a는 선행 명령어, ls는 후행 명령이라 할게요. a라는 디렉토리가 없기 때문에, 후행 명령인 ls는 실패하게 됩니다. 즉 command 1 && command 2일 때, command 1이 실패하면 2가 실행되지 않습니다. 

 

 

  ls && cat 1.txt는 어떤가요? ls가 실행되기 때문에, cat 1.txt도 실행됩니다. ls 명령어의 수행 결과는 1.txt이고, cat 1.txt의 수행 결과는 12345입니다. 선행 명령어가 에러 없이 실행 되었기 때문에, 후행 명령어가 실행이 되었습니다. 그리고 이것 역시 에러 없이 실행되었습니다.

 

 고로, 모든 커멘드들이 이상 없이 실행되었을 때 성공하길 바란다면 && 연산자로 이어주는 게 적절합니다.

 

 

 예를 들어, ls && ls && cd a를 보면 마지막의 cd a가 실패합니다. $?은 마지막 명령어의 return value를 돌려주는데요. cd a가 실패했기 때문에, 0이 아닌 값을 돌려줍니다.

 

 

 반대로 ls && ls && ls는 3개의 명령이 모두 성공하였기 때문에, 마지막 command였던 ls의 리턴값인 0을 돌려줍니다.

 


 ||은 무엇일까요? 이것은 선행 명령어가 실패하면 후행 명령어가 실행됩니다. 먼저 ls || cat 1.txt를 보겠습니다. ls가 성공했기 때문에, ls의 결과물인 1.txt가 출력됩니다. 그런데, 후행 명령어인 cat 1.txt가 실행되지 않았습니다. 이는 선행 명령어가 성공했기 때문입니다.

 

 

 이 경우는 다릅니다. cd a || cat 1.txt인데요. cd a가 실패했습니다. 따라서, 후행 명령이 수행되게 됩니다. cat 1.txt의 결과물은 12345이므로, 이것이 shell에 출력되게 됩니다.

 


 ; 연산자도 있습니다. 이것은 뭘까요? 선행 명령어가 성공하던 말던 후행 명령어가 실행됩니다. cd a; cat 1.txt를 봅시다. a로 이동하라는 명령은, 디렉토리 a가 없기 때문에 실패할 겁니다. 그럼에도, 1.txt의 내용을 출력하라는 명령이 실행됩니다.

 

 

 ls; cat 1.txt는 어떨까요? ls라는 명령어가 성공했습니다. 그럼에도, 1.txt의 내용이 출력되는 명령이 실행됩니다.