W Wikipedii artykuł dla .sh mówi:
Typ rozszerzenia pliku .sh znajduje się w powłoce Bourne'a .
A co z innymi powłokami unixowymi?
Wiem, że shebang jest używany w pliku do wskazania interpretera do wykonania, ale zastanawiam się:
- Jakie są zalety i wady rozszerzeń plików w porównaniu z brakiem rozszerzeń plików?
shell-script
files
scripting
filenames
conventions
Amelio Vazquez-Reina
źródło
źródło
bash script.sh
(lubsh
oczywiście).Odpowiedzi:
Nazwałbym tylko
.sh
coś, co ma być przenośne (i mam nadzieję, że jest przenośne).W przeciwnym razie myślę, że po prostu lepiej jest ukryć język. Uważny czytelnik i tak znajdzie go w linii shebang. (W praktyce
.bash
lub.zsh
, etc ... przyrostki są rzadko stosowane).źródło
Powiedziałbym, że nie istnieją „dobre praktyki” dla rozszerzeń plików, ściśle rzecz biorąc: systemy plików Unix / Linux / * BSD same w sobie nie obsługują rozszerzeń. To, co nazywasz rozszerzeniem, jest jedynie przyrostkiem pojedynczej nazwy pliku. Różni się to od systemów plików i systemów operacyjnych VM / CMS, VMS, MS-DOS i Windows, w których specjalne rozszerzenie w ekwipunku moralnym i-węzła jest zarezerwowane dla rozszerzenia.
Ten mały rant się skończył, myślę, że głupotą jest wstawienie sufiksu „.sh”, „.ksh” lub „.bash” w nazwie pliku skryptu powłoki. Program jest programem: nie ma korzyści w rozróżnieniu tego, co zostanie wykonane. Żaden unix, linux ani żadne inne jądro nie zdecydowało się na wywołanie interpretera w niektórych plikach tylko z powodu przyrostka nazwy pliku. Wszystko to odbywa się przez
#!
linię lub inną sekwencję bajtów na początku pliku. W rzeczywistości decyzja o tym, co należy wykonać na podstawie „rozszerzenia” nazwy pliku, jest jednym z czynników, które sprawiają, że Windows jest magnesem szkodliwego oprogramowania. Sprawdź, ile oszustw związanych ze złośliwym oprogramowaniem w systemie Windows dotyczy pliku o nazwie „coś.jpg.exe” - domyślnie nowsze Windows nie wyświetlają rozszerzenia „.exe” i zachęć użytkownika do dwukrotnego kliknięcia „To, co możesz uznać za bezpośrednie polecenie, jest często skryptem powłoki. Czasami
cc
był skryptemfirefox
sh, skryptemstartx
sh, skryptem sh. Nie sądzę, aby oznaczanie skryptu za pomocą przyrostka „.sh” wiązało się z korzyściami poznawczymi lub organizacyjnymi.źródło
.sh
rozszerzenie powłoki , będziesz musiał wpisać je.sh
jako część nazwy polecenia podczas jego uruchamiania. To jest główny powód, dla którego nie lubię umieszczać tego rozszerzenia (to samo z czymkolwiek mającym linię shebang). BTW, problemem w systemie Windows nie jest sam.exe
przedrostek (w końcu stworzenie pliku wykonywalnego o nazwieimage.jpg
w Linuksie jest trywialny ), ale fakt, że Windows zwykle ukrywa to rozszerzenie, w połączeniu z faktem, że akcja wymagała uruchomienia pliku wykonywalnego i otwarcie dokumentu jest dokładnie takie samo.Jako ten, który pracował w wielu różnych środowiskach, musiałem pisać w wielu różnych powłokach. Wierzcie lub nie, na różnych platformach pociski nie są takie same. Więc jeśli przechowujesz swoją osobistą bibliotekę w wielu powłokach (w razie potrzeby), bardzo pomocne jest użycie rozszerzeń do identyfikacji powłok. W ten sposób, kiedy przechodzisz na inną platformę i powłoka jest nieco inna, wiesz, jakie skrypty mają być modyfikowane. .sh .ksh .bsh .csh ...
źródło
#!
na początku skryptu (np.#!/bin/bash
)?Jak już powiedziałeś, rozszerzenia plików Uniksa są czysto informacyjne. Potrzebujesz tylko skryptu, aby mieć poprawny shebang i być wykonywalny.
Możesz nie mieć rozszerzenia lub używać
.sh
.Osobiście używam następujących konwencji, niezależnie od użytej powłoki (csh, tcsh, bash, sh, ...):
.sh
skryptów klasycznych, od niskiej do wysokiej klasy.źródło
Nie powinieneś używać rozszerzenia dla plików wykonywalnych, ponieważ nie są one wymienne. Wyobraź sobie, że masz skrypt powłoki
a.sh
, a następnie ponownie napisz w pythoniea.py
, teraz musisz zmienić każdy program, który nazywa cię skryptem, masz wyciek informacji o implementacji.Całe rozszerzenie nazwy pliku w systemie Windows Mircosoft to bałagan: na przykład to, co mogło być
a.audio, b.audio, c.audio
, jesta.mp3, b.wav, c.ogg
id.picture, e.picture, f.picture
jestd.jpeg, e.png, f.gif
. Przez większość czasu nie dbamy o to, w jakim formacie jest dźwięk lub obraz. Musimy też dużo czasu uczyć nowych użytkowników wszystkich rozszerzeń plików.źródło
*.sh
który właśnie wpadłem, jest to, że Debianrun-parts
nie będzie uruchamiał skryptów z rozszerzeniami, takich jak/etc/cron.*/
: archive.oreilly.com/pub/post/runparts_scripts_a_note_about.htmlRozszerzenia skryptów powłoki są bardzo przydatne. Na przykład często piszę skrypty, które mają wiele plików w wielu językach (np. Bash, awk i lua) w tym samym katalogu. Jeśli muszę szukać ciągu tylko w plikach bash, rozszerzenie czyni to bardzo przydatnym, aby zmniejszyć liczbę fałszywych alarmów. Lub jeśli chcę zrobić liczbę wierszy całego mojego kodu bash dla tego projektu.
Trudno jest wpisać rozszerzenie podczas uruchamiania programu, dlatego też tworzę dowiązanie symboliczne bez rozszerzenia do głównego pliku wykonywalnego, aby je edytować / uruchamiać bez konieczności każdorazowego wpisywania rozszerzenia. Dowiązania symboliczne są tanie i łatwe.
źródło
Jak powiedzieli inni, powłoka nie dba o rozszerzenia. Pozwala to jednak na szybką identyfikację plików przez ludzi. Widzę pliki z rozszerzeniem
.py
lub.sh
szybko wiem, jakie powinny one być. Jak mówi Steve, wyszukiwanie według rozszerzenia pliku lub liczenie linii to również względy praktyczne.źródło