---
title: "순수 Bash로 만든 터미널 할 일 관리자, Tashk"
published: 2026-05-11T22:01:47.000Z
canonical: https://jeff.news/article/2599
---
# 순수 Bash로 만든 터미널 할 일 관리자, Tashk

Tashk는 Bash 4 이상과 표준 POSIX 도구만으로 돌아가는 미니멀 터미널 할 일 관리자다. 작업 CRUD, 프로젝트 태그, 마감일, 통계, 달력, CSV 저장소까지 갖췄지만 JSON, 데이터베이스, npm 설치는 전혀 쓰지 않는다.

- Tashk는 “그냥 Bash로 어디까지 만들 수 있나”에 가까운 터미널 할 일 관리자임
  - Bash 4 이상과 표준 POSIX 도구만 있으면 돌아감
  - JSON, 데이터베이스, npm 설치 같은 건 없음
  - 이름도 task와 bash를 섞은 말장난인데, 프로젝트 성격 자체가 꽤 셸 덕후 감성임

- 기능은 장난감치고 꽤 갖춰져 있음
  - 작업 추가, 수정, 삭제, 이름 변경 같은 기본 CRUD를 지원함
  - `@project` 태그로 작업을 프로젝트별로 묶을 수 있음
  - 상태는 TODO와 DONE으로 관리하고, 완료 시각도 자동으로 남김
  - 마감일을 넣으면 지난 작업을 시각적으로 경고해줌

- 터미널 도구답게 출력 쪽도 신경 썼음
  - 프로젝트별 완료율을 막대 형태로 보여주는 통계 화면이 있음
  - 월간 달력으로 마감 작업을 볼 수 있고, 월말에 가까워지면 다음 달도 자동으로 보여줌
  - 완료는 초록색, 마감 초과는 노란색, 프로젝트는 파란색처럼 ANSI 색상을 활용함

> [!TIP]
> 이런 류의 도구는 “내가 매일 쓸 생산성 앱”이라기보다, Bash로 상태 관리와 파일 저장, 날짜 처리를 어떻게 엮는지 보는 샘플로 읽으면 더 재밌음.

- 저장 방식은 일부러 단순하게 잡았음
  - 기본 데이터 파일은 `~/.tasks` CSV 파일임
  - 설정은 `~/.tashkrc`에 key=value 형태로 저장됨
  - 런타임에서는 모든 작업을 Bash 배열에 올렸다가 변경 시 CSV로 다시 씀
  - CSV 필드는 id, status, create_date, end_date, due_date, project, object의 7개 구조임

- 날짜 이식성도 챙긴 점이 포인트임
  - 리눅스의 GNU date와 macOS·BSD 계열 date는 옵션이 다르게 동작하는 경우가 많음
  - Tashk는 시작 시점에 GNU/BSD date를 감지해서 포터블하게 처리함
  - 작은 CLI 도구라도 날짜가 들어가는 순간 플랫폼 차이가 바로 튀어나온다는 걸 보여주는 대목임

- 명령어 인터페이스는 셸 도구답게 직관적인 편임
  - `tashk add "buy milk"`처럼 작업을 추가함
  - `tashk <UUID> done`으로 완료 처리하고, `todo`로 되돌릴 수 있음
  - `tashk @project add "task description"`처럼 프로젝트 기준으로도 작업을 다룸
  - `stats`, `calendar`, `calendar next`, `calendar 2026/12` 같은 조회 명령도 있음

- MIT 라이선스라 뜯어보고 고쳐 쓰기 좋음
  - 개인용 할 일 관리자라기보다, 셸 스크립트로 작은 상태ful 앱을 만드는 레퍼런스에 가까움
  - 특히 Bash associative array, CSV 파싱, ANSI 출력, 날짜 호환성 처리에 관심 있으면 코드 읽는 맛이 있을 듯

---
## 기술 맥락

- Tashk가 고른 핵심 선택은 “데이터베이스 없이 CSV, 런타임 상태는 Bash 배열”이에요. 할 일 관리자는 데이터 모델이 단순하니까 SQLite 같은 걸 붙이지 않아도 충분히 굴러가거든요.

- 대신 이 선택은 장단점이 분명해요. CSV는 사람이 직접 열어보고 백업하기 쉽고 `awk`, `sed`, `cut` 같은 도구와 잘 맞아요. 반대로 동시 수정, 복잡한 검색, 필드 안의 특수문자 처리 같은 문제는 앱이 직접 조심해야 해요.

- GNU date와 BSD date를 감지하는 부분도 현실적인 선택이에요. 날짜 계산은 CLI에서 자주 필요하지만, 리눅스와 macOS가 같은 명령어 이름으로 다른 옵션을 받는 경우가 많거든요. 작은 도구라도 여러 개발자 환경에서 쓰려면 이런 차이를 피할 수 없어요.

- 그래서 Tashk는 “Bash로 만든 투두 앱”보다 “셸 철학으로 만든 작은 로컬 앱”에 가까워요. 입력과 출력은 텍스트고, 저장소도 텍스트고, 설치도 심볼릭 링크나 alias면 끝나는 구조라서요.

## 핵심 포인트

- 순수 Bash로 작성된 터미널 기반 할 일 관리자
- 작업 추가·수정·삭제, 프로젝트 이동, 완료 상태, 마감일, 통계, 달력 기능 제공
- 저장소는 기본적으로 ~/.tasks CSV 파일이고 설정은 ~/.tashkrc key=value 파일을 사용
- GNU date와 BSD date를 자동 감지해 리눅스와 macOS 계열 이식성을 챙김

## 인사이트

거대한 생산성 앱의 반대편에 있는 장난감 같은 프로젝트지만, 셸 철학을 좋아하는 개발자에게는 꽤 매력적인 예제다. Bash 배열, ANSI 출력, CSV 영속화, 날짜 호환성 같은 현실적인 잡기술이 한 파일 안에 모여 있다.
