Nếu đó là một kịch bản, chỉ cần gọi kịch bản là
bash scriptname.sh
Không cần phải thay đổi liên kết nào cả.
Để thực thi được biên dịch, bạn có thể đi tuyến đường chroot:
mkdir rootfs
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
cp /bin/bash rootfs/bin/sh
cp yourprogram rootfs/
sudo chroot rootfs sh
Và sau đó chạy chương trình của bạn hoặc sudo chroot rootfs /yourprogram
Tuy nhiên, trong thực tế không có lý do tại sao bạn không thể sử dụng /bin/bash
làm liên kết tượng trưng /bin/sh
. Trong thực tế, trước khi phiên bản 6.10 Ubuntu đã được sử dụng /bin/bash
như /bin/sh
, và sau đó họ chuyển do /bin/sh
là nhanh hơn nhiều, thực hiện gọn gàng hơn của POSIX /bin/sh
(có nghĩa là, nó tuân theo chuẩn POSIX bao Unix-like hoạt động tiện ích hệ thống và hệ điều hành nên cư xử và thực hiện một số nội bộ của họ), và vì lý do tính di động. Tôi thực sự khuyên bạn nên đọc câu trả lời của Gilles cũng như các ghi chú lịch sử về cách thức /bin/dash
diễn ra. Về khả năng tương thích, các tập lệnh được viết để dash
sử dụng các tính năng POSIX sẽ chạy với bash
vỏ mặc định hoàn toàn tốt. Thông thường, đó là cách khác gây ra vấn đề -bash
có các tính năng không được yêu cầu bởi /bin/sh
, như <<<
cú pháp hoặc mảng.
Ngoài ra, lệnh được đề cập có lẽ được viết bằng RHEL hoặc CentOS, được sử dụng /bin/bash
như một liên kết tượng trưng /bin/sh
, gợi ý hai điều: có lẽ chúng nhắm mục tiêu HĐH cụ thể và không tuân thủ các nguyên tắc POSIX. Trong trường hợp đó, bạn cũng nên kiểm tra những thứ khác mà lệnh yêu cầu, vì nếu nó thực sự được viết với một hệ điều hành khác, bạn có thể gặp nhiều vấn đề hơn là chỉ liên kết lại /bin/sh
.