Tránh tránh BASH-isms trên các tập lệnh shell


37

Có tồn tại một công cụ tương tự như Perl :: Critic sẽ kiểm tra các tập lệnh shell của bạn và chỉ ra các lỗ hổng, các vấn đề về tính di động, sử dụng các chương trình không chuẩn mà không có dự phòng, sử dụng chương trình không dùng nữa, v.v.?

Tôi nhận ra rằng set -o posixsẽ vô hiệu hóa việc sử dụng không phải POSIX, nhưng điều đó sẽ không cho tôi biết những điều tôi muốn biết, chẳng hạn như mảng vỏ lập chỉ mục zsh bắt đầu từ 1, và bash, từ 0 và không hỗ trợ mảng nào cả.

Câu trả lời:


36

checkbashism . Trên Debian, nó được vận chuyển như một phần của các công cụ bảo trì gói .

Kiểm tra kịch bản của bạn dưới dấu gạch ngangposh . Cả hai đều có một vài cấu trúc không phải POSIX, nhưng nếu tập lệnh của bạn hoạt động ở cả hai, nó có khả năng hoạt động ở hầu hết các nơi. (Với lời cảnh báo rằng thật khó để kiểm tra các tập lệnh shell điển hình vì chúng có xu hướng có nhiều trường hợp góc.)

Nếu bạn có ý định cho các tập lệnh của mình có thể di động tới các nền tảng nhúng Linux, hãy kiểm tra chúng với BusyBox . Lưu ý rằng BusyBox có thể bị hạn chế nhiều hơn hoặc ít hơn, tùy thuộc vào hệ thống nhúng mà bạn muốn; Sẽ rất bình thường khi có các tập lệnh dựa trên một tính năng mà một số cài đặt BusyBox không có.

Lưu ý rằng tính không di động không đến từ vỏ một mình, nó cũng đến từ các tiện ích bên ngoài. OpenBSD và Solaris có xu hướng có các tiện ích với các tính năng POSIX và không nhiều hơn nữa, vì vậy chúng rất tốt để thử nghiệm tính di động.

Bạn sẽ muốn tham khảo đặc tả POSIX và các tài nguyên khác được đề cập trong chuỗi này (đặc biệt là hướng dẫn sử dụng autoconf ); nhưng đó là tài liệu, nó không hữu ích nếu bạn vô tình sử dụng một tính năng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.