2019년 12월 11일 수요일

yes라는 기괴한 명령어

업무를 위해 VPN을 통해서 종종 외부 - 내가 원래 소속된 기관 - 에 있는 리눅스 서버에 접속을 한다. CLC Genomics Workbench를 쓰기 위한 목적이 대부분이다.

VPN 접속을 제공하는 프로그램이 나만을 위해 존재하는 것이 아니라서 일정 시간 동안 키 입력이 없으면 끊어진다는 것이 문제이다. 정확히 몇 분인지는 모르겠지만 대략 20-30분 정도인 것으로 여겨진다. Command line interface에서 돌아가는 응용 프로그램이라면 nohup으로 돌려놓고 로그아웃을 해도 되지만, CLC Genomics Workbench와 같은 GUI 프로그램은 그렇게 하기가 참으로 난감하다.

disown 명령어를 쓰면 가능할지도 모르겠다. 이것은 좀 더 나중에 알아보자.

작업을 돌려놓고 기다리는 상태에서 VPN 접속이 끊기는 것을 막기 위하여 일부러 키 입력을 하거나 마우스를 건드리기는 매우 귀찮다. 키 입력을 자동으로 생성하는 방법이 있다는 말을 들은 적이 있었지만 어떻게 하는지는 물어보지를 못했다.

구글에 물어보자. CLI에서 저절로 키 입력을 생성하는 방법은 무엇이 있을까? yes라는 명령어가 바로 그것이다. yes라고 치면 화면에 y가 줄줄 출력된다. 마치 y와 엔터를 계속 입력하는 것처럼 말이다. yes why라고 입력하면 이번에는 why가 계속 출력된다. 언제까지? Control+C를 눌러서 멈추기 전까지 영원히!

yes는 계속 'y'를 입력해야 하는 명령어 또는 스크립트의 실행을 위해 쓰인다. 다음과 같이 약간 장식을 하면 1부터 20까지의 숫자가 1초 간격으로 반복하여 화면에 표시된다. $(seq 1 20)을 적당한 문자열로 바꾸어도 된다. 그저 yes라고만 쳐도 되지만, 화면에 한 줄로 비가 내리듯 y가 빠르게 지나가는 것을 보면 마치 컴퓨터를 혹사하는 것 같아서 때로는 1초 간격으로 느긋하게 뿌려대고 싶다.

$ yes "$(seq 1 20)" | while read digit; do echo $digit; sleep 1; done
1
2
3
4
5
...

이 트릭은 How to use the yes command on Linux에서 얻었다. 원본 one-liner는 echo $digit라고 써야 할 곳에 echo digit라고 잘못 기재하였다.

2019년 12월 13일 업데이트

터미널 창을 하나 더 열어서 yes 명령으로 아무리 키 입력을 위조(?)해 넣어도 소용이 없었다. 화장실에 좀 오래 다녀온 다음 책상 앞에 돌아와 앉으니 한창 작업을 하던 CLC 화면이 날아가고 접속이 끊긴 상태였기 때문이다. 으으... 이것 때문에 편의점에 달려가서 사 온 샌드위치로 끼니를 때우며 모니터 앞에 앉아서 지켜보던 날이 몇 날이었는데! VPN 접속 프로그램은 자기 기분대로 접속 지속 여부를 결정하는 모양이다.

댓글 없음: