Như đã nêu, bash
thường có sẵn trong cài đặt mặc định cho nhiều bản phát hành. Kịch bản của bạn sẽ không đạt được cơ sở người dùng lớn nhất bằng cách dựa vào zsh
.
Một câu hỏi quan trọng cần trả lời trước khi thiết kế tập lệnh của bạn là " Tại sao nó lại được thực thi trong tập lệnh nào? "
Các shell khác nhau sử dụng cú pháp khác nhau hoặc cung cấp các hàm shell bổ sung có thể không được các shell khác hỗ trợ. Để viết một tập lệnh cho "thế giới người dùng cuối linux chung", hãy xác định xem tập lệnh của bạn có sử dụng bất kỳ cú pháp hoặc hàm shell nào dựa trên một môi trường shell cụ thể hay không.
Ví dụ: bash
shell hỗ trợ các bản mở rộng nhất định không được hỗ trợ bởi dash
shell Bourne hoặc bất kỳ /bin/sh
điểm nào trên hệ thống của người dùng.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
Hãy thử thực hiện echo {1..10}
với /bin/sh
so với /bin/bash
và bạn sẽ nhận được kết quả rất khác nhau.
Điều tương tự cũng xảy ra zsh
, trong khi hỗ trợ hầu hết bash
cú pháp, cung cấp mở rộng bổ sung và cú pháp không được bash
shell hỗ trợ . Xem bảng này so sánh vỏ cho các ví dụ cụ thể.
Bạn có thể mở rộng cơ sở người dùng tiềm năng của mình ra ngoài bash
bằng cách tuân thủ các tập lệnh hoạt động khi được gọi với #!/bin/sh -u
. Tuy nhiên, điều này dẫn đến một câu hỏi quan trọng khác để đặt ra: " Cái gì đang được hy sinh để đổi lấy tính di động lớn hơn? "
Xác định xem sự khác biệt liên quan đến mối quan tâm bảo mật, chức năng, hiệu quả hoặc bất cứ điều gì khác mà bạn cảm thấy là ưu tiên cho tập lệnh của bạn có đáng để hy sinh hay không. Bạn có thể không muốn sử dụng rộng rãi tập lệnh với lỗ hổng bảo mật đã biết chỉ vì nó hoạt động trong nhiều môi trường hơn.
Vì vậy, nhiều tập lệnh được viết để bash
hỗ trợ cho các tập lệnh này được sử dụng làm tiêu chí khi so sánh các shell lệnh . Nhiều người sẽ có thể chạy tập lệnh của bạn hơn nếu nó dựa vào zsh
hoặc bất kỳ cú pháp nào khác dành riêng cho môi trường shell.
Ngoài ra, hãy nhớ rằng cuối cùng bạn không có quyền kiểm soát cách người dùng thực thi tập lệnh (cũng hữu ích để gỡ lỗi các tập lệnh trong các trình bao khác nhau ):
Hãy nhớ rằng nếu bạn sử dụng trình bao để đọc tập lệnh shell (tập lệnh sh sh tên tập), thay vì thực thi trực tiếp (tập tin ./scriptname,), trình bao sẽ coi tất cả các nhận xét khi bắt đầu tập lệnh shell là nhận xét. Cụ thể, nhận xét chỉ định trình thông dịch sẽ sử dụng khi thực thi tập lệnh (Số #! / Bin / sh -u -) sẽ bị bỏ qua, cũng như tất cả các tùy chọn được liệt kê bên cạnh trình thông dịch đó.
Vì vậy, điều tốt nhất bạn có thể làm về việc này là làm cho các tập lệnh của bạn có thể di động, miễn là không có sự hy sinh lớn cho cách thức hoạt động của nó.
Bạn cũng có thể thấy các quy ước mã hóa Bash - Stack Overflow .
zsh
có thể phổ biến trong khi ở những nhóm khác (lĩnh vực ngân hàng) thì điều đó hầu như không nghe thấy. Tôi nghĩ bạn nên cung cấp thêm thông tin nếu bạn cần lời khuyên phù hợp về vấn đề này.