Một cách khác là gọi trình thông dịch và chuyển đường dẫn tới tập lệnh tới nó:
/bin/sh /path/to/script
Dấu chấm và nguồn tương đương. (EDIT: không, chúng không phải: như KeithB đã chỉ ra trong một nhận xét về câu trả lời khác, "." Chỉ hoạt động trong các shell liên quan đến bash, trong đó "nguồn" hoạt động trong cả shell bash và csh.) Nó thực thi đoạn script trong -place (như thể bạn đã sao chép và dán tập lệnh ngay tại đó). Điều này có nghĩa là bất kỳ hàm và biến không cục bộ nào trong tập lệnh vẫn còn. Điều đó cũng có nghĩa là nếu tập lệnh thực hiện một cd vào một thư mục, bạn sẽ vẫn ở đó khi hoàn thành.
Các cách khác để chạy một kịch bản sẽ chạy nó trong lớp con riêng của nó. Các biến trong kịch bản không còn tồn tại khi hoàn thành. Nếu tập lệnh thay đổi thư mục, thì nó không ảnh hưởng đến môi trường gọi.
/ path / to / script và / bin / sh script hơi khác nhau. Thông thường, một kịch bản có "shebang" ở đầu giống như thế này:
#! /bin/bash
Đây là đường dẫn đến trình thông dịch kịch bản. Nếu nó chỉ định một trình thông dịch khác với bạn khi bạn thực thi nó, thì nó có thể hoạt động khác đi (hoặc có thể không hoạt động gì cả).
Ví dụ: tập lệnh Perl và tập lệnh Ruby bắt đầu bằng (tương ứng):
#! /bin/perl
và
#! /bin/ruby
Nếu bạn thực thi một trong những tập lệnh đó bằng cách chạy /bin/sh script
, thì chúng sẽ không hoạt động.
Ubuntu thực sự không sử dụng bash shell, nhưng một cái rất giống được gọi là dash. Các tập lệnh yêu cầu bash có thể hoạt động hơi sai khi được gọi bằng cách thực hiện /bin/sh script
vì bạn vừa gọi một tập lệnh bash bằng trình thông dịch dấu gạch ngang.
Một điểm khác biệt nhỏ giữa gọi trực tiếp tập lệnh và chuyển đường dẫn kịch bản tới trình thông dịch là tập lệnh phải được đánh dấu thực thi để chạy trực tiếp, nhưng không được chạy bằng cách chuyển đường dẫn đến trình thông dịch.
Một biến thể nhỏ khác: bạn có thể thêm tiền tố vào bất kỳ cách nào trong số những cách này để thực thi tập lệnh với eval, vì vậy, bạn có thể có
eval sh script
eval script
eval . script
vân vân Nó không thực sự thay đổi bất cứ điều gì, nhưng tôi nghĩ tôi nên bao gồm nó cho triệt để.