Oficjalny standard / konwencja dla rozszerzenia pliku dla skryptów powłoki do źródła


12

Zastanawiałem się, czy istnieje konwencja dla rozszerzeń typów plików dla skryptów powłoki, które chcesz pobierać zamiast uruchamiać. Na przykład:

  1. Jeśli chcę uruchomić ten skrypt w podpowłoce.

    ./script.sh 
  2. Jeśli chcę pamiętać, aby uruchomić ten skrypt z bieżącej powłoki.

    . script.source 

Czy istnieje konwencja (na przykład POSIX) dla typu pliku w drugim przykładzie? Coś jak .sourcelub .sourceme?


Aktualizacja

To pytanie nie dotyczy żadnej opinii. Wyraźnie powiedziałem, że chciałbym wiedzieć, czy istnieje standardowe rozszerzenie pliku dla tego rodzaju skryptów. To pytanie jest w jeszcze mniejszym stopniu oparte na opiniach niż dobrze przyjęte pytanie dotyczące podobnego problemu ( użyć rozszerzenia .sh lub .bash dla skryptów bash? ).


1
Niektórzy uważają, że skrypty powłoki, które można uruchamiać w plikach wykonywalnych (tzn. Zaczynają się od #!/bin/shlub podobne, nie powinny mieć rozszerzenia, ponieważ użytkownik nie powinien przejmować się, w jakim języku został napisany skrypt podstawowy.
the_velour_fog

1
Zależy, po co, możesz mieć env, rc, conf itp.
123

1
@ 123 to zależy, czasami po zbudować coś ów użyteczny i umieścić go w $PATH, można dojść do korzystania przez cały czas, więc jej jak, ps, ls, curli wszystkie inne polecenia, a następnie zacząć tworzyć powłoki funkcji ukończenia wokół niego, znajdę można usunąć rozszerzenie. Ale tak, kiedy pozyskujesz skrypt powłoki, który sam nie jest wykonywalny, nie zrobiłbym chmod +xich i nazwałbym je script.sh. często też przypisuję rozszerzenie wyłącznie dlatego, że jeśli tego nie zrobię, nie dostanę podświetlenia składni w moim edytorze.
the_velour_fog

5
Nie ma konwencji. Jeśli jesteś w firmie lub współpracujesz przy projekcie udostępniania (np. Opensource), możesz mieć lokalne standardy do spełnienia, ale de facto nie ma konwencji.
Stephen Harris

1
Słowo „konwencja” (oznaczające nr 2) prawdopodobnie prowadzi do odpowiedzi „opartych na opiniach”. Specyfikacja otwartej grupy dla źródła nie wymusza żadnego standardu nazewnictwa.
Jeff Schaller

Odpowiedzi:


18

Użyłbym .sh(dla plików w shjęzyku POSIX , .bashdla bashplików niezgodnych z sh , czyli rozszerzenie identyfikuje język, w którym napisany jest skrypt) dla plików, które mają być pozyskiwane (lub bardziej ogólnie nie przeznaczone do wykonania), i brak rozszerzenia dla plików, które mają zostać wykonane.

Możesz także dodać:

#! /bin/echo Please-source

she-bang, więc gdy zostanie wykonana przez pomyłkę (choć spodziewam się, że te pliki nie powinny mieć uprawnień do wykonywania, które już uniemożliwiłyby wykonanie), otrzymasz powiadomienie, że należy je pozyskać.


Możesz także wyjść, jeśli skrypt nie został pobrany ( stackoverflow.com/q/2683279/4694621 )
Mateusz Piotrowski,

4

W przypadku plików źródłowych, myślę, że najlepszym sposobem jest .conf dla plików, które konfigurują skrypt i .shlib lub .shlibs dla plików, które mają funkcje lub inne narzędzia.

Jeśli chcesz zapobiec uruchomieniu skryptu z niewłaściwą powłoką, a hashbang nie jest dla Ciebie wystarczający, możesz użyć tego:

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

1
Jeśli masz zamiar użyć specyficzne dla Linuksa /proc/$$/exe, równie dobrze można to zrobić za case $(readlink "/proc/$$/exe") in */bash)..., chociaż tutaj, ja po prostu użyć: if [ -z "$BASH_VERSION" ]. ( echopowinno być echo >&2). (Lubię cię .conflub .shlibs(ale dla plików sh) rozszerzenia, chociaż może to nie pomóc wyróżników składni, które opierają się na tym rozszerzeniu).
Stéphane Chazelas

Tak, widzę ten plik .shlibs, w jakimś programie, który nie ładuję, ale nie pamiętam, więc zacząłem go używać. Dziękuję bardzo za podpowiedź, będę edytować pytanie z wersją readlink o wiele piękniejszą. ;-)
Luciano Andress Martini

@ StéphaneChazelas Podświetlanie składni może być wyzwalane przez meta-dane w samych plikach (przynajmniej Emacs i Vim), więc wybór rozszerzenia nazwy pliku jest bez znaczenia w tym względzie.
Kusalananda
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.