Linux(리눅스) >(Redirect) 리디렉트와 >>

안녕하세요 jay입니다.
오늘은 Linux에서 >(Redirect), 리디렉트에 대해 알아보도록 하겠습니다.

> (Redirect) : 프로그램의 결과 혹은 출력을 파일이나 다른 스트림으로 전달하거나 남길 때 사용됩니다. ex) 프로그램 > 파일
>> : >와 마찬가지로 프로그램의 결과 혹은 출력을 파일이나 다른 스트림으로 전달하거나 남길때 사용됩니다. 단 차이는 >는 출력을 파일로 redirection해서 파일을 overwriting을 하고, >>는 마지막에 redirected output을 추가하여 출력을 파일로 리디렉션합니다.

예시

# example.py

import sys

def main():
    print(sys.argv[1])
    

if __name__=='__main__':
    main()
 example.py라는 파이썬 파일을 실행했습니다. sys.argv는 자동으로 command line에서 인수(argument)를 공백으로 구분하여 나타내는 문자열 목록입니다. 예를 들어 python example.py hello라고 입력할 경우 리스트에는 ["example.py", "hello"]가 들어갑니다.



#!run.sh

python example.py 1
python example.py 2
 run.sh은 shell파일입니다. run.sh을 실행시켜 위 코드들을 실행시켜 보겠습니다.




 run.sh을 실행을 시켰습니다. 하지만 Permission이 거부당해, chmod를 통해 해제를 한 뒤 다시 실행을 시키니 1,2가 차례로 나왔습니다. 이제 > (redirect) 와 >>를 활용해보겠습니다. 



#! run.sh

python example.py 1 > example.txt
python example.py 2 > example.txt
>를 추가해서 command line에 인수를 example.txt에 redirect 해보겠습니다.





 다시 run.sh을 실행을 하고 ls를 해보니 전에 없던 example.txt가 생겼습니다. 그리고 cat을 통해 example.txt의 내용을 확인하니 2가 들어갔습니다. 위에 설명과 같이, >는 출력이 overwrite된다는 것을 알 수 있습니다. 



#! run.sh

python example.py 1 >> example.txt
python example.py 2 >> example.txt
 이번엔 >>를 추가해서 command line에 인수를 example.txt에 redirect 해보겠습니다.




다시 run.sh을 실행을 했고, cat을 통해 example.txt의 내용을 확인하니 2, 1, 2가 들어갔습니다. 전에 출력 2에다가 >>는 redirected output이 overwrite이 아니라 추가가 되므로 1,2가 차례로 추가가 되었습니다. 




댓글