Một tiêu chuẩn / quy ước chính thức cho một phần mở rộng tập tin cho shell script thành nguồn


10

Tôi đã tự hỏi nếu có một quy ước cho các phần mở rộng loại tệp cho các tập lệnh shell mà bạn muốn tìm nguồn thay vì chạy. Ví dụ:

  1. Nếu tôi muốn chạy tập lệnh này trong một subshell.

    ./script.sh 
  2. Nếu tôi muốn nhớ chạy script này từ shell hiện tại.

    . script.source 

một quy ước (như POSIX chẳng hạn) cho một kiểu tệp trong ví dụ thứ hai không? Một cái gì đó như thế .sourcehay .sourceme?


Cập nhật

Câu hỏi này không hỏi về bất kỳ ý kiến. Tôi đã tuyên bố rõ ràng rằng tôi muốn biết liệu có một phần mở rộng tệp được tiêu chuẩn hóa cho loại tập lệnh này hay không. Câu hỏi này thậm chí còn ít dựa trên ý kiến ​​hơn câu hỏi nhận được tốt này về một vấn đề tương tự ( Sử dụng phần mở rộng .sh hoặc .bash cho tập lệnh bash? ).


1
Một số người nghĩ rằng các tập lệnh shell có thể chạy một tệp thực thi (nghĩa là chúng bắt đầu bằng #!/bin/shhoặc tương tự không nên có phần mở rộng, vì người dùng không cần quan tâm đến ngôn ngữ mà tập lệnh cơ bản được viết bằng ngôn ngữ nào.
the_velour_fog

1
Phụ thuộc vào mục đích của nó, bạn có thể có env, rc, conf, v.v.
123

1
@ 123 nó phụ thuộc, thỉnh thoảng khi bạn xây dựng một cái gì đó thats hữu ích và đặt nó vào $PATH, bạn đến sử dụng tất cả thời gian, vì vậy nó giống như, ps, ls, curlvà tất cả các lệnh khác, sau đó bạn khởi động chức năng hoàn thành xây dựng lớp vỏ bao quanh nó, tôi tìm Bạn có thể bỏ phần mở rộng. Nhưng vâng, khi bạn đang tìm nguồn cung cấp một tập lệnh shell, bản thân chúng không thể thực thi được, tôi sẽ không sử dụng chmod +xchúng và tôi sẽ đặt tên cho chúng script.sh. Ngoài ra, tôi thường chỉ định một phần mở rộng hoàn toàn bởi vì nếu không tôi sẽ không làm nổi bật cú pháp trên trình soạn thảo của mình.
the_velour_fog

5
Không có quy ước. Nếu bạn đang ở trong một công ty hoặc nếu bạn đang hợp tác trong một dự án chia sẻ (ví dụ như mã nguồn mở) thì bạn có thể có các tiêu chuẩn địa phương để tuân thủ, nhưng không có quy ước thực tế.
Stephen Harris

1
Từ "quy ước" (có nghĩa là số 2) là những gì có thể dẫn đến câu trả lời "dựa trên quan điểm". Thông số nhóm mở cho nguồn không thực thi bất kỳ tiêu chuẩn đặt tên nào.
Jeff Schaller

Câu trả lời:


18

Tôi sẽ sử dụng .sh(đối với các tệp bằng shngôn ngữ POSIX , .bashđối với bashcác tệp không tương thích với sh , đó là phần mở rộng xác định ngôn ngữ mà tập lệnh được viết) cho các tệp dự định có nguồn gốc (hoặc nói chung là không có ý định thực hiện), và không có phần mở rộng cho các tệp có nghĩa là được thực thi.

Bạn cũng có thể thêm:

#! /bin/echo Please-source

she-bang, để khi được thực thi do nhầm lẫn (mặc dù tôi mong muốn các tệp đó không được cấp quyền thực thi, điều này sẽ ngăn việc thực thi), bạn sẽ nhận được thông báo rằng nó sẽ có nguồn gốc thay thế.


Bạn cũng có thể thoát nếu tập lệnh không có nguồn gốc ( stackoverflow.com/q/2683279/4694621 )
Mateusz Piotrowski

4

Trong trường hợp các tệp nguồn, tôi nghĩ cách tốt nhất là .conf cho các tệp định cấu hình tập lệnh của bạn và .shlib hoặc .shlib cho các tệp có chức năng hoặc các tiện ích khác.

Nếu bạn muốn ngăn tập lệnh của mình chạy sai shell và hashbang không đủ cho bạn, bạn có thể sử dụng:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi

1
Nếu bạn sẽ sử dụng Linux cụ thể /proc/$$/exe, bạn cũng có thể làm điều đó case $(readlink "/proc/$$/exe") in */bash)..., mặc dù ở đây, tôi chỉ đơn giản là sử dụng : if [ -z "$BASH_VERSION" ]. ( echonên echo >&2). (Tôi thích bạn .confhoặc .shlibs(nhưng đối với các tệp sh) mặc dù nó có thể không giúp các công cụ tô sáng cú pháp dựa vào tiện ích mở rộng).
Stéphane Chazelas

Vâng, tôi thấy .shlibs này, trong một số loại chương trình mà tôi không tải, nhưng tôi không nhớ, vì vậy tôi bắt đầu sử dụng nó. Cảm ơn bạn rất nhiều về mẹo, tôi sẽ chỉnh sửa câu hỏi với phiên bản readlink đẹp hơn nhiều. ;-)
Luciano Andress Martini

@ StéphaneChazelas Làm nổi bật cú pháp có thể được kích hoạt thông qua siêu dữ liệu trong chính các tệp (ít nhất là cho Emacs và Vim), vì vậy lựa chọn mở rộng tên tệp là không liên quan trong khía cạnh đó.
Kusalananda
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.