0
0
Lập trình
Admin Team
Admin Teamtechmely

Dừng Nhớ, Bắt Đầu Viết Kịch Bản: Hành Trình của Tôi với cli-bits

Đăng vào 2 tháng trước

• 6 phút đọc

Dừng Nhớ, Bắt Đầu Viết Kịch Bản: Hành Trình của Tôi với cli-bits

Hình ảnh bởi Gabriel Heinzer trên Unsplash

Giới thiệu

Là một nhà phát triển, tôi đã nghe rất nhiều lần rằng:

Thành thạo dòng lệnh — nó mở ra một cấp độ năng suất hoàn toàn mới.

Tôi thường bỏ qua lời khuyên này, nghĩ rằng nó chỉ dành cho những người có trí nhớ phi thường. Làm sao một người bình thường có thể nhớ hết các tham số của ls? Làm thế nào để nhớ thứ tự của các tham số trong find? Và làm thế nào để quen với cú pháp kỳ quặc của bash?

Khoảng một năm trước, tôi đã đọc cuốn sách The Pragmatic Programmer, phiên bản kỷ niệm 20 năm, trong đó một lần nữa khuyến khích tôi thành thạo dòng lệnh. Vì tôi thích cuốn sách này, tôi quyết định thử lại với shell. Tôi nhanh chóng phát hiện ra hai điều thú vị đã hoàn toàn thay đổi cách nhìn của tôi về nó:

  • Bạn không cần phải nhớ mọi thứ. Thay vì cố gắng nhớ các lệnh cụ thể, hãy tập trung vào luồng công việc của bạn. Những thao tác nào bạn lặp đi lặp lại hàng ngày? Có thể bạn đang tìm kiếm một số tệp tin nhất định, hoặc mở trình duyệt với một URL cụ thể. Viết kịch bản cho những thao tác đó một lần, và quên đi các chi tiết bên trong.

  • Bạn không cần phải học cú pháp bash. Hãy viết kịch bản của bạn bằng ngôn ngữ yêu thích của bạn. Ngày nay, hầu hết các ngôn ngữ đều có thể chạy ở chế độ thông dịch chỉ với một dòng shebang đúng. Nếu ngôn ngữ bạn chọn không hỗ trợ điều này — hãy biên dịch các công cụ của bạn.

Dưới ảnh hưởng của hai khám phá này, tôi bắt đầu xây dựng một bộ sưu tập nhỏ các kịch bản mà tôi sử dụng trong công việc hàng ngày — cli-bits. Tôi rất vui được chia sẻ nó. Hãy sử dụng nó như một nguồn cảm hứng để tạo ra kịch bản của riêng bạn; và nếu bạn tìm thấy một số trong số đó hữu ích, tôi sẽ càng vui hơn nữa. Hãy cùng khám phá bên trong nhé!

Lưu ý: Các tiện ích được viết chủ yếu cho macOS, nhưng nhiều tiện ích cũng có thể hoạt động trên Linux. Các kịch bản JS cũng có thể chạy trên Windows, mặc dù chúng chưa được kiểm tra ở đó.

gitb — in ra nhánh Git hiện tại

Đơn giản nhưng rất hữu ích — đây là kịch bản đầu tiên tôi viết cho bộ sưu tập này. Tôi sử dụng nó như một phần của các pipeline, chẳng hạn như kéo từ nhánh từ xa tương ứng:

Copy
gitb | xargs git pull origin
# Hoặc:
git pull origin $(gitb)

youtrack — mở một vấn đề trong bug tracker

Tôi sử dụng YouTrack rất nhiều. Một ngày nọ, tôi nhận ra rằng mình cứ phải gõ URL YouTrack bằng tay, tạo thành từ https://youtrack.jetbrains.com/issue/ và tên nhánh tính năng hiện tại, được đặt theo tên vấn đề. Vì vậy, tôi đã viết lệnh youtrack để tự động hóa điều này cho tôi:

Copy
~/my-project $ gitb
ABC-1234
~/my-project $ gitb | youtrack

Tiện ích này đọc từ stdin, trích xuất tên vấn đề và mở URL tương ứng — trong trường hợp này là https://youtrack.jetbrains.com/issue/ABC-1234. Tất nhiên, cách tiếp cận tương tự có thể áp dụng cho GitHub, Jira hoặc bất kỳ bug tracker nào khác.

lastDown — in ra N tệp tin đã tải xuống gần đây nhất

Việc tải xuống tệp luôn là một mớ hỗn độn với tôi. Tôi phải nhớ tên và đường dẫn của các tệp tải xuống, nhưng nếu tôi chọn một thư mục mỗi lần, nó sẽ làm gián đoạn việc duyệt web của tôi và tôi mất dấu lý do mình ở trên trang đó. Sau nhiều năm gặp rắc rối này, tôi đã áp dụng cách tiếp cận sau:

  • Luôn tải xuống vào thư mục mặc định (~/Downloads trên hầu hết các hệ thống)
  • Sử dụng các kịch bản để truy vấn và chuyển các tệp đã tải xuống gần đây

lastDown đảm nhận phần “truy vấn” trong quy trình này:

Copy
~/Pictures $ lastDown 2
/Users/me/Downloads/PXL_20250404_190924.jpg
/Users/me/Downloads/PXL_20250404_191358.jpg

Có vẻ như tôi đã tải xuống một vài bức ảnh tôi đã chụp trong ngày lễ Web Developer Day 🙂 Lưu ý rằng các đường dẫn là tuyệt đối — không có sự nhầm lẫn về đường dẫn tương đối.

moveHere — di chuyển tệp đến thư mục hiện tại

Đây là phần thứ hai của quy trình tải xuống:

Copy
~/Pictures $ lastDown 2 | moveHere
~/Pictures $ ls
PXL_20250404_190924.jpg   PXL_20250404_191358.jpg

Cả hai tệp đã được di chuyển đến thư mục hiện tại — ~/Pictures trong trường hợp này. Vấn đề tải xuống đã được giải quyết!

trash — di chuyển tệp vào Thùng rác

Tôi luôn sợ rm vì tính không thể quay lại của nó. Nó có vẻ quá khắc nghiệt, đặc biệt vì hầu hết các hệ thống đã có thùng rác. Thật kỳ lạ, tuy nhiên, không có tiện ích chuẩn nào để di chuyển tệp vào đó — vì vậy tôi đã viết một tiện ích đơn giản này. Nó hỗ trợ việc truyền tệp dưới dạng đối số hoặc qua pipe.

Copy
~/Pictures $ trash PXL_20250404_*

Sử dụng nó ít căng thẳng hơn nhiều so với rm — bất kỳ sai lầm nào đều có thể đảo ngược.

getLine — chọn dòng từ stdin

Tôi thường liệt kê rất nhiều tệp với ls hoặc find, và đôi khi tôi chỉ cần một vài tệp trong số đó. Tôi có thể cố gắng điều chỉnh các tham số lệnh, nhưng tôi không nhớ chúng, vì vậy tôi đã viết một tiện ích getLine để chọn các dòng theo số:

Copy
~/logs $ ls
log_2025-09-03.log
log_2025-09-04.log
log_2025-09-08.log
log_2025-09-12.log
(...và nhiều tệp khác)
~/logs $ ls | getLine 1
log_2025-09-03.log
~/logs $ ls | getLine 1 3
log_2025-09-03.log
log_2025-09-04.log
log_2025-09-08.log

Các chỉ số là dựa trên 1 để phù hợp với less -N. Các chỉ số âm cũng được hỗ trợ.

lless — chọn một dòng và mở tệp

Đây chỉ là một phím tắt cho getLine + less. Tiện ích này hiểu đối số đầu tiên là một số dòng và chuyển bất kỳ đối số nào còn lại trực tiếp đến less.

Copy
~/logs $ ls | lless 2 -S

Điều này mở tệp thứ 2 từ danh sách ls trong less, log_2025-09-04.log trong ví dụ trước đó, truyền tùy chọn -S để tắt việc bọc dòng.

today — hoặc ngày mai, hoặc hôm qua

Đây là một phiên bản đơn giản của date, xuất ra ngày hiện tại, hoặc một ngày tương đối so với nó theo một độ lệch nhất định. Tôi sử dụng nó để tổ chức các nhật ký đã tải xuống.

Copy
~ $ date
Mon Sep 16 06:50:52 CEST 2025
~ $ mkdir $(today -1) && cd $(today -1)
~/2025-09-15 $ lastDown 3 | moveHere

Điều này di chuyển ba tệp đã tải xuống gần đây nhất vào một thư mục 2025-09-15 mới được tạo.

codeDebug — mở một dự án trong VS Code và debug dịch vụ TS

Như bạn có thể biết, bạn có thể mở một dự án với lệnh code:

Copy
~/my-project $ code .

Điều này mở my-project trong VS Code. Đôi khi tôi cần debug dịch vụ ngôn ngữ TypeScript, điều này yêu cầu đặt biến TSS_DEBUG. Tôi thấy tiện lợi khi viết kịch bản này để tôi có thể mở một dự án trong chế độ debug của máy chủ TS với một lệnh duy nhất:

Copy
~/my-project $ codeDebug .

Bây giờ tôi đã sẵn sàng kết nối với quá trình node bằng debugger và bắt đầu khám phá những điều tinh vi của TypeScript.

Còn gì nữa không?

Có một số lệnh bổ sung để liệt kê, trích dẫn và tìm kiếm các tệp cụ thể. Đây không phải là khoa học tên lửa, cũng không phải là một framework — chỉ là những bits nhỏ, thực tế mà tôi sử dụng hàng ngày.

Tôi hy vọng bạn cũng nhìn nhận nó theo cách tương tự. Hy vọng rằng cách tiếp cận này sẽ giúp bạn giảm bớt khó khăn và giữ cho tâm trí của bạn rõ ràng cho công việc thực sự!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào