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:
Jeśli chcę uruchomić ten skrypt w podpowłoce.
./script.sh
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 .source
lub .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? ).
shell-script
shell
standard
conventions
Mateusz Piotrowski
źródło
źródło
#!/bin/sh
lub podobne, nie powinny mieć rozszerzenia, ponieważ użytkownik nie powinien przejmować się, w jakim języku został napisany skrypt podstawowy.$PATH
, można dojść do korzystania przez cały czas, więc jej jak,ps
,ls
,curl
i 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łbymchmod +x
ich i nazwałbym jescript.sh
. często też przypisuję rozszerzenie wyłącznie dlatego, że jeśli tego nie zrobię, nie dostanę podświetlenia składni w moim edytorze.Odpowiedzi:
Użyłbym
.sh
(dla plików wsh
języku POSIX ,.bash
dlabash
plikó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ć:
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ć.
źródło
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:
źródło
/proc/$$/exe
, równie dobrze można to zrobić zacase $(readlink "/proc/$$/exe") in */bash)...
, chociaż tutaj, ja po prostu użyć:if [ -z "$BASH_VERSION" ]
. (echo
powinno byćecho >&2
). (Lubię cię.conf
lub.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).