Có nhiều chương trình thực hiện ngôn ngữ của /bin/sh
. Trên Ubuntu, /bin/sh
dash, được thiết kế để nhanh, sử dụng một lượng bộ nhớ nhỏ và không hỗ trợ nhiều hơn mức tối thiểu dự kiến /bin/sh
. Trên RHEL, /bin/sh
là bash, chậm hơn và sử dụng nhiều bộ nhớ hơn nhưng có nhiều tính năng hơn. Một trong những tính năng này là ==
toán tử cho [
cú pháp có điều kiện. Dash hỗ trợ [
, là một tính năng sh cơ bản, nhưng nó không có ==
toán tử là phần mở rộng bash (và ksh và zsh).
Bạn có thể chuyển hệ thống của bạn sang sử dụng bash. Trên Ubuntu, /bin/sh
là một liên kết tượng trưng đến dash
. Bạn có thể làm cho nó một liên kết tượng trưng để bash
thay thế. Các phiên bản hiện tại của Debian và Ubuntu (và các dẫn xuất) làm cho điều này trở thành một tùy chọn cài đặt dấu gạch ngang. Để thay đổi nó, hãy chạy
sudo dpkg-reconfigure dash
và trả lời, vâng, vâng, tiếp tục /bin/sh
chuyển sang bash.
Bạn có thể giữ bash như /bin/sh
, nhưng nó sẽ làm cho hệ thống của bạn chậm hơn một chút. Thậm chí có thể hình dung rằng một số tập lệnh hệ thống không tương thích với bash, mặc dù điều đó không thể xảy ra vì bash chủ yếu là một siêu tập hợp.
Đối với các bản phân phối không có giao diện để lựa chọn giữa các lần triển khai /bin/sh
, đây là cách chuyển sang bash.
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
Giữ một thiết bị đầu cuối mở và kiểm tra xem bạn vẫn có thể chạy một số sh
tập lệnh sau đó. Nếu bạn làm hỏng lệnh này, nó sẽ làm cho hệ thống của bạn không thể sử dụng được. (Nhân tiện, lý do tôi sử dụng nhiều lệnh ở trên thay vì nhìn đơn giản sudo ln -sf bash /bin/sh
là đó ln -sf
không phải là nguyên tử. Trong trường hợp không thể thừa nhận, máy tính của bạn bị hỏng trong thao tác này, bạn cần khởi động từ phương tiện cứu hộ để khôi phục nó. Ngược lại, mv
là nguyên tử.)
Để khôi phục dấu gạch ngang như /bin/sh
:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
Lưu ý rằng nếu sh /bin/bash
theo mặc định trên bản phân phối của bạn, việc chuyển sang dấu gạch ngang có thể khiến tập lệnh không thành công, vì bash có nhiều tính năng hơn dấu gạch ngang. Các tập lệnh Bash nên bắt đầu bằng #!/bin/bash
và các tập lệnh bắt đầu #!/bin/sh
không nên sử dụng các tính năng dành riêng cho bash, nhưng các bản phân phối đi kèm với bash vì /bin/sh
có thể sử dụng các tính năng dành riêng cho bash trong #!/bin/sh
các tập lệnh dành riêng cho bản phân phối đó (miễn là người dùng không mong đợi có thể chuyển sang dấu gạch ngang /bin/sh
và không có hy vọng rằng các tập lệnh này hoạt động trên bản phân phối khác).
==
điều đó nên được=
. Điều đó, và rằng các mở rộng biến nên được trích dẫn gấp đôi.