Tôi có nên lưu tập lệnh của mình với phần mở rộng .sh không?


66

Tôi có một số tập lệnh chức năng và tôi muốn sao chép vào /usr/bintôi muốn sử dụng chúng như các lệnh đầu cuối bình thường. Đó có phải là một cách thực hành tốt để sử dụng chúng với .shtiện ích mở rộng hay tôi có thể lưu chúng mà không cần gia hạn?


6
Ngoài ra nếu bạn muốn những tập lệnh này có sẵn cho tất cả người dùng, /usr/local/bincó thể là một lựa chọn tốt hơn.
Salem

6
@Salem /usr/bin/usr/local/bincả hai nên có sẵn cho tất cả người dùng, nhưng /usr/local/bintốt hơn cho các tệp thực thi không phải là một phần của gói.
gerrit

Lợi ích duy nhất tôi thấy là các biên tập viên như vim hoặc nano biết cách làm nổi bật ngay từ đầu, và đó là về nó.
Rath

1
@rath Tôi nhận được tô sáng cú pháp mà không có phần mở rộng nếu tôi có shebang được đặt thành #!/usr/bin/env bashhoặc #!/bin/bash.
Sparhawk

@Sparhawk Thật vậy nhưng tôi thường quên nó cho đến khi tôi cố gắng chạy kịch bản;)
rath

Câu trả lời:


71

Không, nó không phải là một thực hành tốt, bạn nên giữ các kịch bản của bạn mà không cần mở rộng. Lưu ý rằng các tập lệnh là một phần của các gói không có phần mở rộng .sh , tức là update-grub , không phải update-grub.sh . Nếu bạn vẫn không bị thuyết phục, thì hãy lưu ý rằng Hướng dẫn về Phong cách Google Shell nói:

Các tệp thực thi không được có phần mở rộng (ưu tiên mạnh mẽ) hoặc phần mở rộng .sh. Các thư viện phải có phần mở rộng .sh và không được thực thi.

Tái bút: Bạn không cần phải đặt tập lệnh của mình vào /bin. Bạn có thể tạo thư mục ~/binvà đặt tập lệnh của bạn ở đó. Thư mục ~/binđược bao gồm trong $PATHmặc định, vì vậy các tập lệnh đặt ở đó có thể được chạy như bất kỳ lệnh shell nào khác.


4
"Thư mục ~ / bin được bao gồm trong $PATHmặc định" - Từ khi nào? Dù sao, ~/.local/bincó lẽ là một lựa chọn tốt hơn vì nó là một tiêu chuẩn.
nyuszika7h

1
Bạn có nghĩa là "Thư viện phải có phần mở rộng .so", phải không? Không phải sh.
Keith Wolters

3
@KeithWolters trước tiên, không phải tôi, mà là Google. Thứ hai, .sh, không phải .so, chúng ta đang nói về shell script chứ không phải nhị phân.

1
Hướng dẫn về phong cách Google rất cụ thể đối với Google. Ví dụ: "Bash là ngôn ngữ kịch bản lệnh shell duy nhất được phép cho các tệp thực thi." Rõ ràng là một quy tắc nội bộ hơn là thực hành tốt nhất.
Paul Draper

1
@ nyuszika7h hãy kiểm tra ~ / .profile ... nó sẽ chèn $ HOME / bin vào đường dẫn của bạn nếu thư mục tồn tại
Corey Goldberg

9

Tôi thứ hai khuyến nghị sử dụng ~/binmà sẽ tự động được thêm vào của bạn $PATH, như Serge nói. Hoặc /usr/local/bin, có thể đã có trên PATH. Tuy nhiên:

  • Bạn đang làm điều này cho chính mình. Sử dụng bất cứ điều gì bạn cảm thấy thoải mái với. Thật vậy, tôi muốn nói hãy giữ phần mở rộng để bạn sẽ được nhắc rằng đó là tập lệnh của bạn, vì -
  • Phần mở rộng là không phổ biến trong /usr/bin. Trong hệ thống của tôi, tôi chỉ có thể tìm thấy hai:

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh

    Vì vậy, nếu bạn đang đóng gói, chắc chắn bỏ qua phần mở rộng.


2
~/binđược thêm vào $PATHtự động nếu nó tồn tại, không cần thêm thủ công. Chỉ cần tạo thư mục, đăng xuất và đăng nhập lại.
Sergey

5

Chỉ cần đặt dòng sau ở đầu tệp:

#!/bin/bash

Vì vậy - tập tin đó sẽ được tự động gõ: Shell Script mà không cần bất kỳ tiện ích mở rộng nào!

Hãy nhớ cho phép thực hiện để tập tin.

Để đặt tập lệnh sao cho có thể chạy bằng lệnh trực tiếp, hãy truy cập: Tôi nên đặt tập lệnh của mình ở đâu để tôi có thể chạy tập lệnh bằng lệnh trực tiếp?


2
Hoặc thậm chí chỉ #! / Bin / sh nếu bạn không cần vỏ bash đầy đủ.
flickerfly

Nhiều hệ điều hành liên kết / bin / sh và / bin / bash
Max Coplan
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.