CS(computer science)

linux - redirection 이란?

ebang 2023. 10. 15. 22:59
반응형

redirection

쉘은 redirection을 이용해서 명령어 파일을 복사하고, 열고, 닫고, 다른 파일에게 참조되고, 또는 다른 파일들을 바꿀 수도 있다.

redirection으로 현재 쉘 실행 환경을 바꿀 수도 있다. 

redirectioin은 왼쪽에서 오른쪽으로 순서대로 가공되어 사용되는데, 

{변수 이름} 혹은 파일 디크립터 뒤에 redirection이 올 수 있다. 

무슨 말인가 하면,  >&- and <&-, 를 제외한 redirection operator 가 사용되면, 쉘은 10보다 큰 값을 갖는 file descriptor를 {varname = 변수이름}에 할당한다. 그리고 이게 제공되면 명령어 범위 내에서 redirection이 지속되면서 shell programmer가 file descriptor 의 수명을 조절할 수 있게 만든다.

 >&- and <&- 연산자의 경우, varname은 닫을 file descriptor 를 의미하게 된다. 

 

file descriptor number 가 생략된 경우, '<' 연산자 같은 경우엔 standard input (fd 0)을 참조하게 되고,

'>' 연산자는 standard output (file descriptor 1)을 참조하게 된다. 

 

즉 > file 은 1> file 과 같은 의미가 되는 것이다. 

 

ls > dirlist

를 하면 dirlist에 ls 를 한 output이 저장된다.  즉 현 디렉토리 목록이 저장되는 것이다. 

>의 기본 좌측값은 1, standard ouput이기 때문에 이 명령은 곧 아래 명령과 같다. 

 

ls 1> dirlist

 

 

 

>& operator 는 stdout, stderr 를 redirect 하는 명령어다. 

>& file

명령어는 stdout, stderr 를 모두 file로 redirect하는 명령어고,

1> file 2> file

 과 같은 의미가 된다.  (다만 위에서는 file이 한번만 열리고 아래에선 두번 열린다.)

 

 

한편 >& 명령어는 dup과 같은 뜻인데, 2>&1 은 dup(1,2)랑 같은 뜻이고 2<&1과 절대적으로 같은 뜻이 된다.

dup함수는 dup(int oldfd, int newfd) prototype을 갖고, (newfd)가 (oldfd)가 가리키는 file을 참조하도록 만든다. 

즉 dup(1,2)는 2가 1이 가리키는 표준 출력을 가리키게 만드는 것이다. (그래서 표준 출력, 표준 에러가 동시에 file에 overwrite되는 것이다)

 

 

이런 명령어가 쓰이는 예시는 

 

자동 CI/CD를 위해 쉘 스크립트를 작성하는 경우인데, 

nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &

이런 명령어를 사용할 때, 에러나 표준 출력의 내용이 background (&)에 적히도록 하는 명령어가 되는 것이다. 

(&는 background 에서 동작하도록 만든다.)

 

반응형