※ 이 시리즈는 KAIST 바이오및뇌공학과 최정균 교수님의 "[BiS531] 유전체정보학" 강의 내용을 바탕으로 함을 밝힙니다.

 

한 줄에 명령어를 여러 개 입력하는 경우는 두 가지가 있을 수 있다.

 

A) 단순히 여러 개의 명령어를 한 줄에 순서대로 입력해 연속 실행하고 싶다.

B) 앞 명령어의 결과를 뒤따르는 명령어의 인자로 전달하고 싶다.

 

A의 예시는: 디렉토리를 새로 만들고, 그 안에 파일을 복사붙여넣기 하고, 파일 이름을 바꾸겠다.B의 예시는: 이 디렉토리에 존재하는 파일 목록에서 어떤 텍스트를 검색하겠다.

 

B는 전산학에서 말하는 '함수' 개념을 잘 기억해두면 사용하기 용이하다. 수학의 함수가 어떤 두 집합의 원소를 연결하는 방법의 정의인 것과 달리, 전산학의 함수는 '뭔가를 넣으면(input)' '뭔 처리를 해서(process)' '결과물로 뭔가 나온다(output)'는 흐름을 의미한다고 적당히 받아들일 수 있다. 전산학 전공자가 들으면 화낼 거 같구만... 뭔가를 넣을 때 넣지 않을 수도 있고 (void), 뭔 처리를 하는 걸로 작동이 끝나서 딱히 결과물로 뭔가를 돌려주지 않을 수도 있고 (return 0) ... 다양한 경우가 있지만, 대충.B에서 말하는 '인자로 전달하겠다'는 그 명령어(프로그램, 함수)의 input으로 앞 명령어의 output을 집어넣겠다는 의미다.

 

 

각각의 명령어를 작성하는 문법은 아래와 같다.

 

A) 세미콜론 semi-colon (;) 혹은 쌍앰버샌드 double-ampersand (&&)

명령어1 ; 명령어2
# 명령어1이 제대로 실행되거나 말거나 명령어2 실행이 시도된다

명령어1 && 명령어2
# 명령어1의 결과자 True일 때에만 명령어2가 실행된다

명령어1 ; 명령어2 ; 명령어3
# 이어 붙이는 명령어 수에 제한은 없다

 

B) 수직선 vertical bar (|) : piping

QWERTY 키보드 기준으로 역 슬래쉬(\)나 원화 기호(₩) 키에 shift 입력으로 붙어있다.

la -al | grep 검색할_텍스트

이 사용법은 특별히 piping 이라는 이름이 붙어있다. 파이핑! 파이프를 연결하듯 앞 명령어의 output이 뒷 명령어의 input으로 쏙 들어가기 때문에 이런 이름이 붙었다고 한다.

 

 

 

커맨드 라인에서 복잡한 작업을 한꺼번에 처리하기도 좋고, 커맨드 라인의 여러 명령어 입력을 통째로 프로그램으로 작성하는 bash programming 시에도 종종 사용된다.

유용한 기능이므로 용법을 알아두고, 다양하게 생각해 적용해보자!

+ Recent posts