tcsh는 유닉스 계열 운영 체제에서 사용되는 셸(shell) 프로그램으로, C 셸(csh)을 기반으로 하여 이와 하위 호환성을 유지하면서 확장된 기능을 제공한다. 이름의 "t"는 TENEX 운영 체제에서 유래한 것으로, TENEX의 명령 완성(completion) 기능에서 영감을 받아 명령줄 편집과 프로그래밍 가능한 명령·파일 이름 완성 기능을 추가한 것이 특징이다.
개발 배경과 역사
tcsh는 카네기멜론 대학교의 켄 그리어(Ken Greer)가 TENEX 스타일의 파일 이름 완성 기능을 구현하면서 시작되었다. 그리어는 1975년 9월부터 관련 코드 작업을 시작하여 1981년 12월에 이를 C 셸에 통합했고, 1983년 9월에는 마이크 엘리스(Mike Ellis)가 명령 완성 기능을 추가했다. 1983년 10월 3일, 그리어는 net.sources 뉴스그룹에 소스 코드를 공개했다. 이후 폴 플레이스웨이(Paul Placeway), 크리스토스 줄라스(Christos Zoulas) 등이 개발에 참여했다.
tcsh는 원래 빌 조이(Bill Joy)가 만든 C 셸 소스 트리에서 분기된 프로젝트였으나, 현재는 C 셸 계열의 주된 개발 지점으로 자리 잡았다. 기존 C 셸의 기능을 제거하지 않고 기능만 추가했기 때문에 C 셸과의 하위 호환성을 유지한다.
주요 특징
tcsh는 C 셸의 기본 기능에 다음을 추가로 제공한다.
- 명령줄 편집 기능
- 프로그래밍 가능한 명령 및 파일 이름 완성
- 맞춤법 교정 기능
- 명령 히스토리(history) 기능:
!!(직전 명령 실행),!n(n번째 명령 실행),!string(특정 문자열로 시작하는 최근 명령 실행) 등 - 별칭(alias) 인자 선택자: tcsh는 함수 정의를 지원하지 않는 대신, 별칭에 인자를 전달하여 활용하는 독특한 기능을 제공한다. 이는 tcsh만이 제공하는 기능이다.
다른 일반적인 셸과 달리, tcsh 스크립트에서는 함수를 정의할 수 없으며 사용자는 별칭을 대신 사용해야 한다.
배포 및 사용 현황
tcsh는 FreeBSD 및 그 파생 시스템(DragonFly BSD, macOS 등)에서 기본 셸로 사용된 역사가 있다. FreeBSD 13 이하 버전에서는 루트 사용자의 기본 셸이었으나, FreeBSD 14.0부터는 기본 셸이 Almquist 셸(sh)로 변경되었다. macOS의 경우 10.3 이전 버전에서는 사용자 계정의 기본 셸이었으나, 10.3부터 bash로, 10.15(Catalina)부터는 zsh로 변경되었다.
많은 시스템에서 csh 명령이 실제로는 tcsh를 가리키는 경우가 있으며, 두 파일이 하드 링크 또는 심볼릭 링크로 연결되어 있어 어느 이름으로 호출하든 동일한 개선된 C 셸이 실행되기도 한다. 다만 Debian 및 Ubuntu 계열에서는 csh와 tcsh가 별도의 패키지로 제공되며, csh는 원래 BSD 버전의 csh를 기반으로 한다.
기술적 사항
tcsh는 C 언어로 작성되었으며, BSD 라이선스(BSD-3-Clause, 이전에는 BSD-4-Clause) 하에 배포된다. 안정적인 소프트웨어로 평가되며, 대부분 사소한 버그 수정으로 구성된 새 릴리스가 대략 1년에 한 번씩 발표된다. 최신 안정 버전은 2025년 7월 9일에 발표된 6.24.16이다. 공식 웹사이트는 www.tcsh.org이며, 소스 코드는 GitHub 저장소(tcsh-org/tcsh)에서 관리된다.