본문 바로가기

스터디/리눅스 커맨드라인

[리눅스] 36. 그 외 유용한 툴들

 

1. 그룹 명령과 서브 쉘

bash는 명령어들을 그룹화하여 함께 사용할 수 있도록 허용하는 방법이 있다. 그룹 명령을 사용하든지 서브쉘을 사용하는 것이다.

그룹 명령 : 
    " {command1; command2; [ command3; ... ]}"

서브쉘 :
    " (command1; command2; [ command3; ... ]) " 

(1) 리다이렉션 수행
그룹 명령과 서브쉘은 둘다 리다이렉션을 조절하기 위해 사용된다. 복수 명령어들로 리다이렉션을 수행하는 스크립트를 보면
ls -l > opuput.txt
echo "Listing of foo.txt" >> output.txt
cat foo.txt >> output.txt​
세 명령의 출력을 output.txt 파일로 리다이렉션한다.

그룹 명령 : 
{ ls -l; echo "Linsting of foo.txt; cat foo.txt } > output.txt​

서브쉘 : 
( ls -l; echo "Linsting of foo.txt; cat foo.txt ) > output.txt​​

(2) 프로세스 치환
그룹 명령과 서브쉘의 차이점이 있는데, 그것은 그룹 명령은 현재 쉘에서 실행되지만 서브쉘은 현재 쉘의 복사본인 자식 쉘에서 수행한다는 것이다. 이느 쉘의 환경이 복사되고 새 개체가 주어진다는 것을 의미한다. 물론 서브쉘이 종료될 때, 복사된 환경은 사라진다.
그래서 서브쉘보다 그룹명령을 더 선호하며 그룹 명령의 처리 속도가 훨씬 빠르고 메모리를 적게 사용한다.
echo "foo" | read
echo $REPLY​
read 명령이 서브쉘에서 실해오디기 때문에 REPLY 변수의 내용물은 항상 비어있다. 이 문제를 해결하기 위해 프로세스 치환이라는 확장을 제공한다.

read < <(echo "foo")
echo $REPLY


$ echo <(echo "foo")
/dev/fd


(3) 비동기 실행
비동기 방식은 동시에 하나 이상의 작업을 수행할 때 적합하다. 스크립트들은 멀티태스킹하에서 동작하게 만들 수 있다.

bash는 이와 같은 비동기 실행의 관리르 ㄹ도와주는 빌트인 명령어를 가지고 있다. wait 명령어는 명시된 프로세스가 완료될 때까지 부모 스크립트의 실행을 멈추게 한다.

 

 

 

'스터디 > 리눅스 커맨드라인' 카테고리의 다른 글

[리눅스] 35. 배열  (0) 2022.08.15
[리눅스] 33. 흐름 제어: for 루프  (0) 2022.08.08
[리눅스] 32. 위치 매개변수  (0) 2022.08.01
[리눅스] 31. case 분기  (0) 2022.08.01
[리눅스] 30. 문제 해결  (0) 2022.07.25