touch <filename> 구현하기

신연우·2021년 4월 15일
0

PSG 회고

목록 보기
3/5

touch <filename>

linux 환경에서 위와 같은 커맨드를 사용하면 빈 파일을 생성할 수 있다. 이 명령어를 Windows 커맨드에서도 그대로 사용할 수 있도록 만들던 도중 이슈가 발생했다.

What is the issue?

program
  .command("<filename>")
  .description("make new empty file")
  .action(touchActionFunc);

위와 같이 <filename>만 놔두는 상황이라서 command가 먹히지 않아 Command Not Found 에러가 발생하는 이슈가 생겼다.

command는 원래 해당 명령을 식별할 수 있어야 하는데 <>는 option 중 하나이기 때문에, command를 찾는데 소용이 없는 것 같다.

How to solve?

그렇다면, 저 <filename>은 command가 아니라면 어디에 속하는 것일까? 고민을 하던 도중 예전에 사용했던 arguments 메서드가 생각났다. 가만히 생각해보면 argument라고 하는 쪽이 더 어울리기도 하고 말이다.

program
  .arguments("<filename>")
  .description("make new empty file")
  .action(touchActionFunc);

그래서 위와 같이 변경하였더니 동작은 정상적으로 동작했다. 다만, 여기서도 이슈가 발생했는데, 그건 바로 filename을 인자로 전달하지 않았을 때 이 경우 바로 콘솔창에 error: missing required argument 'filename'이 바로 출력되는 것이었다.

argument error handle

물론 에러 메시지가 출력되기 때문에 그대로 사용해도 괜찮을 것이라 생각하겠지만, 현재 나는 이 프로젝트에서 에러 메시지는 모두 빨간 글씨로 출력되도록 관리하고 있다.

그래서 이 에러를 처리하기 위해 구글링을 하던 도중 좋은 글을 찾아 해결할 수 있었다.

if (!process.argv.slice(2).length) {
  throw new Error("Missing required argument 'filename'");
}

간단하게 process.argv의 2번째 인자가 전달되지 않았다면 error를 throw하면 쉽게 해결할 수 있는 문제였다.

앞으로의 목표

  1. get multiple filenames
    linux touch 명령어를 보면 여러 개의 파일 이름을 전달하면 그 파일들을 생성한다. 그래서 이 부분 또한 구현해보고자 한다.
profile
남들과 함께하기 위해서는 혼자 나아갈 수 있는 힘이 있어야 한다.

0개의 댓글