Triết học về CLI app
Mở đầu CLI App là viết tắt của Command Line Interface App , tức là những app sử dụng trên terminal. Có lẽ những ai quen thuộc về hệ thống chạy trên unix sẽ quen thuộc với CLI hơn với những ai đang sử dụng window machine. Tác giả là unix user, thế nên bài viết sẽ dựa trên những ...
Mở đầu
CLI App là viết tắt của Command Line Interface App, tức là những app sử dụng trên terminal. Có lẽ những ai quen thuộc về hệ thống chạy trên unix sẽ quen thuộc với CLI hơn với những ai đang sử dụng window machine. Tác giả là unix user, thế nên bài viết sẽ dựa trên những khái niệm mà ít nhiều sẽ quen thuộc hơn với những ai đã và đang sử dụng unix.
Triết học về CLI app
Các built-in tool của unix như là top, find… đều có thể coi là các CLI app. Để tìm hiểu một app chạy thế nào thì thông thường bạn dùng câu lệnh man. Mình ví dụ kết quả từ man của câu lệnh top là câu lệnh để tìm hiểu các thông số liên quan đến hệ thống hay được dùng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
top(1) top(1) NAME top - display and update sorted information about processes SYNOPSIS top [-a | -d | -e | -c <mode>] [-F | -f] [-h] [-i <interval>] [-l <samples>] [-ncols <columns>] [-o <key>] [-O <skey>] [-R | -r] [-S] [-s <delay>] [-n <nprocs>] [-stats <keys>] [-pid <processid>] [-user <username>] [-U <username>] [-u] |
Thử với một vài các câu lệnh khác như là find hay là awk, các bạn có thể thấy một vài đặc điểm rất “đồng nhất” của CLI app đó là:
- Chỉ tập trung vào một thứ duy nhất (thể hiện bằng việc usage bao giờ cũng rất ngắn gọn)
- Có thể sử dụng một cách “trực quan” (không cần nhiều suy nghĩ từ user)
- Có thể liên kết tốt với các CLI app khác (thông qua xuất output ra stdout để có thể pipe)
- Setting các giá trị default một cách hợp lý
- Có thể install một cách dễ dàng (thông qua binary)
- Có thể “giúp đỡ” người dùng khi họ gõ các câu lệnh sai (thông qua help detail)
Các qui chuẩn
Tham khảo với ví dụ là câu lệnh grep ở trên bạn có thể thấy một CLI app thông thường có 3 phần
- Executable : tên binary / executable file để chạy app
- Options : Các option (optional) mà app có thể nhận
- Arguments : Các giá trị chính không thể thiếu mà app phải xử lý
Options thông thường còn được gọi là flag. Chắc bạn nào đã sử dụng quen CLI app sẽ biết là không chỉ có một kiểu duy nhất, có thể có “2 gạch” (ví dụ: –x y), có thể có “1 gạch” (ví dụ -x y), có thể có 2 gạch và không có gía trị gì cả (ví dụ —). Bạn sẽ thấy băn khoăn và không hiểu là những cách viết đó đến từ đâu.
Có một qui chuẩn (hay chính xác hơn là các qui tắc được khuyến khích) từ GNU và POSIX qui định về “kiểu cách” và “ý nghĩa” của flag cho CLI app nằm tại :
- http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html .
- http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02
- http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_01
Các qui chuẩn đó có thể tóm tắt gồm có
- Argument là option (có thể có, có thể không) nếu bắt đầu bằng –
- Nhiều option có thể gộp lại (ví dụ -abc sẽ tương đương với -a -b -c)
- Option name nên là một chữ cái abc
- Option và argument của option đó có thể nằm liền nhau (ví dụ -o foo và -ofoo là một)
- Sử dụng 2 dấu gạch ngang đứng riêng — để dừng việc parse option lại. Tất cả các kí tự đứng sau — ngay cả bắt đầu bằng dấu gạch ngang cũng không được coi là option
- Option có thể theo bất kì thứ tự nào
- Sử dụng 2 dấu gạch ngang cho cac option với tên dài (ví dụ –name=value)
Kết luận
Chắc một chút lý thuyết bên trên đã đủ để bạn viết một CLI app “tốt” cho riêng mình và cho cả người khác rồi chứ :D.
Happy hacking
Người viết Huydx
Techtalk via kipalog