ฟีเจอร์

คำสั่งลัด

อัปเดตล่าสุด 19 ตุลาคม 2569
ตรวจสอบกับ ccam 0.6.0 และ Claude Code 2.1.302

หน้านี้แปลด้วยเครื่องจากภาษาอังกฤษ ยินดีรับการแก้ไข แก้ไขหน้านี้บน GitHub

ในหน้านี้

คำสั่งลัดคือคำสั่งที่คุณตั้งชื่อเองเพื่อเริ่ม Claude Code ในชื่อบัญชีหนึ่ง: ccwork --resume ทำงานเหมือนกับ ccam work --resume คำสั่งลัดเป็นลิงก์ไปยัง ccam ใน ~/.local/bin จึงใช้ได้ใน 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 json

ccam ยืนยันการเปลี่ยนแปลงทุกครั้ง:

$ 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`)

บัญชีหนึ่งมีคำสั่งลัดได้ไม่เกินหนึ่งคำสั่ง ซึ่งเก็บเป็น shortcut ใน ~/.config/ccam/config.toml ตัวช่วยตั้งค่าของ ccam add จะถาม Create a shortcut command for <name>? [y/N] แล้วตามด้วย Shortcut name [cc<name>]: นอกตัวช่วยตั้งค่า ccam add จะสร้างคำสั่งลัดเฉพาะเมื่อใส่ --shortcut ส่วน ccam list จะแสดงคำสั่งลัดของแต่ละบัญชี หรือแสดง -

คำสั่งลัดส่งทุกอาร์กิวเมนต์ให้ Claude Code แบบเดียวกับที่ ccam <name> ทำกับอาร์กิวเมนต์หลังชื่อบัญชี ซึ่งรวมถึง --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

กฎของชื่อ ซึ่งตรวจตามลำดับนี้:

  • ยาว 1 ถึง 64 อักขระ ประกอบด้วย a-z, 0-9, ., - และ _ และขึ้นต้นด้วยตัวอักษรหรือตัวเลข
  • ไม่ใช่ ccam, claude หรือคำสั่งของ ccam เช่น run หรือ usage
  • ไม่ใช่คำสั่งลัดของบัญชีอื่น
  • ไม่ใช่ไฟล์ใน ~/.local/bin ที่ไม่ได้เป็นลิงก์ไปยัง ccam อยู่แล้ว
  • ไม่ใช่ชื่อของโปรแกรมอื่นใน PATH ของคุณ

การระบุคำสั่งพร้อมกับ --remove จะหยุดด้วย give a command or --remove, not both การตั้งชื่อที่บัญชีมีอยู่แล้วจะพิมพ์ work: ccwork (unchanged) และสร้างลิงก์ใหม่หากลิงก์หายไป

วิธีการทำงาน

การตั้งชื่อจะรัน checkShortcut ซึ่งเรียก shim.Check พร้อมโฟลเดอร์ bin และพาธจริงของไบนารี ccam:

ชื่อจะผ่านการตรวจลงไปทีละขั้นตามลำดับ ข้างการตรวจแต่ละขั้นคือชื่อที่ถูกปฏิเสธ: Work ไม่ตรงรูปแบบ run เป็นคำสั่งของ ccam ccside เป็นของบัญชีอื่น ccfile เป็นไฟล์ที่มีอยู่ใน ~/.local/bin และ git จะบัง /usr/bin/git มีเพียงชื่อที่ผ่านการตรวจทุกขั้นเท่านั้นที่จะถูกบันทึกและสร้างลิงก์

  1. shim.Check จับคู่ชื่อกับ ^[a-z0-9][a-z0-9._-]{0,63}$ จากนั้นกับ config.Reserved แล้วจึงกับ cfg.FindShortcut จะเรียก os.Lstat กับ ~/.local/bin/<name> และสำหรับทุกโฟลเดอร์อื่นใน PATH จะเรียก os.Stat และปฏิเสธไฟล์ปฏิบัติการที่ไม่ได้เป็นลิงก์ไปยัง ccam
  2. ccam บันทึก config.toml ด้วย fsutil.AtomicWrite (ไฟล์ชั่วคราว fsync แล้ว rename)
  3. shim.Remove ลบลิงก์ของคำสั่งลัดเดิม แต่เฉพาะเมื่อเป็นลิงก์ไปยัง ccam
  4. shim.Install สร้างลิงก์ของทุกคำสั่งลัดที่ตั้งค่าไว้ซึ่งยังไม่มี ด้วย os.Symlink ไปยังไบนารี ccam ซึ่งหาพาธด้วย os.Executable และ filepath.EvalSymlinks ขั้นตอนนี้ไม่เคยลบสิ่งใด

ลิงก์จะนับเป็นของ ccam เมื่อ os.Readlink คืนพาธของ ccam หรือเมื่อลิงก์และพาธของ ccam ชี้ไปที่ไฟล์เดียวกัน การลบและการตรวจก่อนเขียนทับทุกครั้งจะผ่านการทดสอบนี้ ccam จึงไม่แตะไฟล์ที่ตัวเองไม่ได้สร้าง

เมื่อคุณรันคำสั่งลัด ชื่อที่คุณพิมพ์คือสิ่งเดียวที่ ccam ต้องการ:

เชลล์หา ccwork ใน PATH เคอร์เนลตามลิงก์และเริ่มไบนารี ccam โดย argv[0] ยังคงเป็น ccwork ใน app.Main ชื่อใดก็ตามที่ไม่ใช่ ccam จะโหลด config.toml หนึ่งครั้งและเรียก shim.Lookup ซึ่งหาบัญชีที่ shortcut ตรงกับ filepath.Base(argv[0]) จากนั้น launcher.LaunchWith จะทำขั้นตอนเดียวกับ ccam <name> โดยใช้การตั้งค่าที่โหลดไว้แล้ว และส่ง argv[1:] ให้ claude โดยไม่เปลี่ยนแปลง

ทำไมจึงใช้ลิงก์สัญลักษณ์แทน alias ของเชลล์หรือสคริปต์ครอบ: ลิงก์สัญลักษณ์ใช้ได้ในทุกเชลล์และในสคริปต์ ไม่ต้องเริ่มเชลล์เพิ่ม (ประมาณ 1 ถึง 2 ms) และการเริ่มยังคงอ่านเพียงไฟล์เดียว scripts/perf-check.sh วัดคำสั่งลัดด้วย hyperfine เทียบกับขีดจำกัด 10 ms (p95) เดียวกับ ccam <name>

ความปลอดภัยและกรณีพิเศษ

  • ลิงก์ที่ไม่มีบัญชีใดเป็นเจ้าของ หากลิงก์ไปยัง ccam ใน ~/.local/bin มีชื่อที่ไม่มีบัญชีใดใช้ เช่น หลังจากที่คุณแก้ shortcut ใน config.toml ด้วยตัวเอง 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 จะสร้างลิงก์ที่หายไป