기능
단축 명령
이 페이지는 영어 원문을 기계 번역했습니다. 수정 제안을 환영합니다. GitHub에서 이 페이지 수정
이 페이지 목차
단축 명령은 직접 이름을 붙여 한 계정으로 Claude Code를 시작하는 명령입니다. ccwork --resume은 ccam work --resume과 똑같이 동작합니다. 단축 명령은 ~/.local/bin에 있는 ccam 링크이므로 bash, zsh, 스크립트 등 PATH에서 프로그램을 실행하는 곳이라면 어디서나 동작합니다. 단축 명령은 필수가 아니니, 자주 시작하는 계정에만 만들면 됩니다.
사용법
ccam shortcut work ccwork # create the shortcut ccwork for work
ccam shortcut 2 ccside # the account with number 2
ccam shortcut work # show it
ccam shortcut work ccw # rename it; the old link is removed
ccam shortcut work --remove # delete it
ccam add side --shortcut ccside
ccam shims install # recreate missing links of all accounts
ccwork -p "summarise" --output-format jsonccam은 변경할 때마다 결과를 알려 줍니다.
$ ccam shortcut work ccwork
✓ shortcut for work: ccwork
$ ccam shortcut work ccw
✓ shortcut for work: ccw (was ccwork)
$ ccam shortcut work --remove
✓ ccw removed; work has no shortcut now
$ ccam shortcut work
work: none (add one with `ccam shortcut work ccwork`)계정마다 단축 명령은 최대 하나이며, ~/.config/ccam/config.toml에 shortcut으로 저장됩니다. ccam add 설정 마법사는 Create a shortcut command for <name>? [y/N]를 묻고, 이어서 Shortcut name [cc<name>]:를 묻습니다. 마법사 밖에서는 --shortcut을 줄 때만 ccam add가 단축 명령을 만듭니다. ccam list는 계정마다 단축 명령을 보여 주며, 없으면 -로 표시합니다.
단축 명령은 ccam <name>이 이름 뒤의 인자를 넘기는 것과 같은 방식으로 모든 인자를 Claude Code에 넘깁니다. --dry-run과 --help도 예외가 아니므로, 실행을 미리 보려면 ccam --dry-run work를 쓰세요.
옵션
| 옵션 | 동작 | 기본값 |
|---|---|---|
--remove |
계정의 단축 명령과 링크를 삭제합니다 | 꺼짐 |
-h, --help |
명령 도움말 | |
--dry-run |
ccam shortcut에서 지원합니다. 이름을 검사하고, 저장하거나 링크하지 않은 채 Would set the shortcut of work to ccwork. 또는 Would remove ccwork, the shortcut of work.를 출력합니다 |
꺼짐 |
ccam shims install은 인자를 받지 않으며, --dry-run을 주면 ccam: --dry-run is not supported by `ccam shims install`; nothing was changed를 출력하고 거부합니다.
이름 규칙은 다음 순서로 검사합니다.
a-z,0-9,.,-,_로 이루어진 1~64자이며, 문자나 숫자로 시작해야 합니다.ccam,claude, 또는run이나usage같은 ccam 명령 이름은 쓸 수 없습니다.- 다른 계정의 단축 명령은 쓸 수 없습니다.
~/.local/bin에 있는 파일 중 ccam 링크가 아닌 파일의 이름은 쓸 수 없습니다.PATH에 있는 다른 실행 파일의 이름은 쓸 수 없습니다.
명령 이름과 --remove를 함께 주면 give a command or --remove, not both 오류를 내고 멈춥니다. 계정에 이미 있는 이름을 다시 지정하면 work: ccwork (unchanged)를 출력하고, 링크가 없으면 다시 만듭니다.
동작 방식
이름을 지정하면 checkShortcut이 실행되고, 이 함수가 bin 폴더와 ccam 실행 파일의 실제 경로를 넘겨 shim.Check를 호출합니다.
이름은 검사를 순서대로 통과해 내려갑니다. 각 검사 옆에는 그 검사에서 거부되는 이름이 있습니다. Work는 패턴에 맞지 않고, run은 ccam 명령이며, ccside는 다른 계정의 것이고, ccfile은 ~/.local/bin에 이미 있는 파일이며, git은 /usr/bin/git을 가리게 됩니다. 모든 검사를 통과한 이름만 저장되고 링크됩니다.
shim.Check는 이름을^[a-z0-9][a-z0-9._-]{0,63}$,config.Reserved,cfg.FindShortcut순서로 확인합니다.~/.local/bin/<name>에는os.Lstat을 호출하고,PATH의 나머지 폴더마다os.Stat을 호출해 ccam 링크가 아닌 실행 파일이 있으면 거부합니다.- ccam은
fsutil.AtomicWrite(임시 파일,fsync, 이름 바꾸기)로config.toml을 저장합니다. shim.Remove는 이전 단축 명령의 링크를 삭제하지만, ccam 링크일 때만 삭제합니다.shim.Install은 설정된 단축 명령 중 링크가 없는 것을 모두 만듭니다.os.Executable과filepath.EvalSymlinks로 찾은 ccam 실행 파일을 가리키도록os.Symlink를 호출합니다. 이 함수는 아무것도 삭제하지 않습니다.
os.Readlink가 ccam 경로를 반환하거나, 링크와 ccam 경로가 같은 파일로 해석되면 그 링크는 ccam의 것으로 간주합니다. 모든 삭제와 덮어쓰기 검사가 이 확인을 거치므로, ccam은 자신이 만들지 않은 파일을 건드리지 않습니다.
단축 명령을 실행하면 ccam에게 필요한 것은 입력한 이름뿐입니다.
셸이 PATH에서 ccwork를 찾고, 커널이 링크를 따라가 ccam 실행 파일을 시작하며, argv[0]은 여전히 ccwork입니다. app.Main에서 ccam이 아닌 이름이면 config.toml을 한 번 읽고 shim.Lookup을 호출합니다. 이 함수는 shortcut이 filepath.Base(argv[0])과 같은 계정을 찾습니다. 그다음 launcher.LaunchWith가 이미 읽은 설정으로 ccam <name>과 같은 단계를 밟고, argv[1:]을 손대지 않고 claude에 넘깁니다.
셸 별칭이나 래퍼 스크립트 대신 심볼릭 링크를 쓰는 이유는 다음과 같습니다. 심볼릭 링크는 모든 셸과 스크립트에서 동작하고, 셸을 추가로 시작하지 않으며(약 1~2 ms 절약), 실행할 때 읽는 파일도 여전히 하나입니다. scripts/perf-check.sh는 hyperfine으로 단축 명령을 측정해 ccam <name>과 같은 10 ms(p95) 한도와 비교합니다.
안전장치와 예외 상황
- 어느 계정의 것도 아닌 링크.
config.toml의shortcut을 직접 고친 경우처럼~/.local/bin에 있는 ccam 링크의 이름을 쓰는 계정이 없으면, ccam은 기본 계정으로 대신 실행하지 않습니다.ccam: ccold is not the shortcut of any account (see `ccam list`, `ccam shortcut`)오류를 내고 멈춥니다.ccam shortcut으로 이름을 다시 지정하거나 링크를 삭제하세요. - 이미 있는 파일. ccam은 자신이 만들지 않은 파일을 절대 바꾸지 않습니다.
ccam shims install은<path> already exists and is not a ccam link, so it was left alone를 출력하고 멈춥니다. - ccam 실행 파일을 옮긴 경우. 이전 링크는 더 이상 없는 경로를 가리키므로, ccam은 이 링크를 자신의 것으로 보지 않습니다. 링크를 삭제한 뒤
ccam shims install을 실행하세요. - 이름 변경과 삭제.
ccam rename은 단축 명령 이름을 그대로 두며, 링크도 계속 동작합니다. 링크는 ccam을 가리키고 ccam이config.toml에서 이름을 찾기 때문입니다.ccam remove는 계정의 링크를 삭제합니다.ccam shortcut <account> <new>는 새 링크를 만들기 전에 이전 링크를 삭제합니다. - PATH. ccam이 링크를 만들 때
~/.local/bin이PATH에 없으면Note: /home/me/.local/bin is not in PATH. Add it to ~/.bashrc or ~/.zshrc:와 함께 추가할export PATH=...줄을 출력합니다. - 나중에 확인하기.
ccam doctor는missing shortcuts in /home/me/.local/bin: ccwork를 보고하고, 폴더가PATH에 없으면 경고합니다.ccam doctor --fix는 없는 링크를 만듭니다.