2010-10-17 66 views
7

tôi muốn chạy chương trình qua tập lệnh. thông thường tôi gõ ./program trong trình bao và chương trình bắt đầu.Linux: Chạy nhị phân trong tập lệnh

kịch bản của tôi trông như thế này:

#!/bin/sh 
cd /home/user/path_to_the_program/ 
sh program 

nó không thành công, tôi nghĩ rằng dòng cuối cùng đã đi sai ...

tôi biết điều này là câu hỏi của trẻ con nhưng thx rất nhiều!

+0

không nên là #!/Bin/sh? – Protostome

Trả lời

0

Bạn không cần "sh" ở đây. Chỉ cần đặt "chương trình" trên dòng cuối cùng của chính nó.

+0

nó cho tôi biết: "chương trình: không tìm thấy" –

+0

Ah, chương trình không nằm trong $ PATH của bạn. ./program sẽ hoạt động. – Toucan

+0

ok, có cách nào để chạy nó thông qua tập lệnh mà không đặt nó vào PATH? –

11

Nếu ./program hoạt động trong trình bao, tại sao không sử dụng nó trong tập lệnh của bạn?

#!/bin/sh 
cd /home/user/path_to_the_program/ 
./program 

sh program khởi chạy sh để thử và giải thích program làm tập lệnh trình bao. Nhiều khả năng nó không phải là một tập lệnh mà là một số tập tin thực thi khác, đó là lý do tại sao nó không thành công.

2

Bạn không cần số sh và có vẻ như bạn không có đường dẫn đến chương trình trong số $PATH của mình.

Hãy thử điều này:

#!/bin/sh 
cd /home/user/path_to_the_program/ 
./program 
+0

Sẽ tốt hơn nếu sử dụng 'sh' được giải thích. Tại sao nó không hoạt động với 'sh'? – Arafangion

1

này nên là đủ:

/home/user/path_to_the_program/program 

Nếu điều đó không làm việc, kiểm tra như sau:

  • bit thực thi dòng
  • công việc của chương trình (nếu là kịch bản)
+0

Cho phép đường dẫn có thể không hoạt động nếu chương trình phụ thuộc vào đường dẫn tương đối từ thư mục hiện tại của nó. Ví dụ, chương trình có thể phụ thuộc vào các tệp đầu vào nằm trong cùng thư mục với chương trình. –

+0

Trong trường hợp đó, bạn đã đúng. –

+0

Bất kể việc này được thực hiện như thế nào, đường dẫn đầy đủ phải đến từ/đâu đó/- nếu không phải trên đường dẫn, sau đó thông qua dòng shebang, nếu không có, thì nó phải được thiết lập rõ ràng thông qua một số phương tiện. – Arafangion

3

Khi bạn gõ

./program 

Vỏ cố gắng để thực hiện chương trình theo cách nó quyết định tập tin cần phải được thực thi. Nếu nó là nhị phân, nó sẽ cố gắng thực hiện chương trình con mục nhập. Nếu vỏ phát hiện đó là một kịch bản, ví dụ như thông qua việc sử dụng các

#!/bin/sh 

hoặc

#!/bin/awk 

hoặc tổng quát hơn

#!/path/to/interpreter 

vỏ sẽ vượt qua các tập tin (và bất kỳ đối số cung cấp) làm đối số cho trình thông dịch được cung cấp, sau đó sẽ thực thi tập lệnh. Nếu trình thông dịch được cung cấp trong đường dẫn không tồn tại, trình bao sẽ bị lỗi và nếu không tìm thấy dòng thông dịch nào, shell sẽ giả định tập lệnh được cung cấp là do chính nó thực thi.

Một lệnh

sh program 

tương đương với

./program 

khi dòng đầu tiên của chương trình chứa

#!/bin/sh 

giả định rằng/bin/sh là sh trong đường dẫn của bạn (nó có thể là/system/bin/sh, chẳng hạn). Việc chuyển một nhị phân sang sh sẽ khiến sh coi nó như là một kịch bản lệnh shell, nó không phải là, và nhị phân không phải là shell có thể diễn giải (là văn bản thuần túy). Đó là lý do tại sao bạn không thể sử dụng

sh program 

trong ngữ cảnh này. Nó cũng sẽ thất bại do chương trình được ruby, awk, sed, hoặc bất cứ điều gì khác mà không phải là một kịch bản shell.

Các vấn đề liên quan