В википедии статья для .sh гласит:
Тип расширения файла .sh см. В оболочке Bourne .
Как насчет других оболочек Unix?
Я знаю, что шебанг используется внутри файла для обозначения интерпретатора для выполнения, но мне интересно:
- Каковы плюсы и минусы расширений файлов по сравнению с расширениями файлов?
shell-script
files
scripting
filenames
conventions
Амелио Васкес-Рейна
источник
источник
bash script.sh
(илиsh
, конечно,).Ответы:
Я бы назвал только
.sh
то, что должно быть переносимым (и, надеюсь , переносимым).В противном случае я думаю, что лучше просто спрятать язык. Внимательный читатель все равно найдет его в линии Шебанга. (На практике
.bash
или.zsh
и т. Д. Суффиксы используются редко.)источник
Я бы сказал, что «хороших практик» для расширений файлов не существует, строго по техническим причинам: файловые системы Unix / Linux / * BSD сами по себе не поддерживают расширения. То, что вы называете расширением, является просто суффиксом одного имени файла. Это отличается от файловых систем и операционных систем VM / CMS, VMS, MS-DOS и Windows, где специальное место в морально-эквивалентном эквиваленте зарезервировано для расширения.
Эта маленькая напыщенная речь сейчас закончена, я думаю, что немного глупо ставить суффикс ".sh", ".ksh" или ".bash" в имени файла сценария оболочки. Программа - это программа: нет никакой выгоды в различении того, что исполняется. Ни Unix, ни Linux, ни ядро не решили вызвать интерпретатор какого-либо файла только из-за суффикса имени файла. Все это делается
#!
строкой или какой-то другой последовательностью байтов "магического числа" в начале файла. Фактически, решение о том, что выполнять на основе имени файла с расширением, является одним из факторов, который делает Windows магнитом вредоносного ПО. Посмотрите, сколько мошеннических программ Windows использует файл с именем "thing.jpg.exe "- по умолчанию в более новых версиях Windows расширение" .exe "не отображается, и пользователю предлагается просто дважды щелкнуть"То, что вы можете считать прямой командой, часто так или иначе является сценарием оболочки. Иногда
cc
это был sh-скрипт,firefox
это sh-скрипт,startx
это sh-скрипт. Я не верю, что для обозначения скрипта суффиксом «.sh» есть когнитивная или организационная выгода.источник
.sh
расширение, вы должны будете ввести его.sh
как часть имени команды при его запуске. Это главная причина, почему я не люблю вставлять это расширение (то же самое, что и что-либо, имеющее линию Шебанга). Кстати, проблема в Windows заключается не в.exe
префиксе как таковом (image.jpg
в конце концов, тривиально сделать исполняемый файл с именем в Linux), а в том, что Windows обычно скрывает это расширение, в сочетании с тем, что действие необходимо для запуска исполняемого файла и открыть документ точно так же.Как тот, кто работал во множестве сред nix, мне приходилось писать в самых разных оболочках. Верьте или нет, на разных платформах оболочки не одинаковы. Поэтому, если вы поддерживаете свою личную библиотеку в нескольких оболочках (когда это необходимо), очень полезно использовать расширения для идентификации оболочек. Таким образом, когда вы переходите на другую платформу, а оболочка немного отличается, вы знаете, какие сценарии нужно изменить. .ш .кш .бш .чш ...
источник
#!
в начале сценария (например#!/bin/bash
)?Не следует использовать расширение для исполняемых файлов, так как они не являются взаимозаменяемыми. Представьте, что у вас есть сценарий оболочки
a.sh
, а затем переписать на pythona.py
, теперь вам нужно изменить каждую программу, которая вызывает ваш сценарий, у вас утечка деталей реализации.Все, что связано с расширением имени файла в Windows Mircosoft, - это беспорядок: например, что могло бы быть
a.audio, b.audio, c.audio
, естьa.mp3, b.wav, c.ogg
иd.picture, e.picture, f.picture
естьd.jpeg, e.png, f.gif
. Большую часть времени нам не важно, в каком формате находится аудио или картинка. Нам также придется потратить много времени на обучение новых пользователей всем расширениям файлов.источник
*.sh
я побежал в том , что устроено в Debianrun-parts
не будет запускать скрипты с расширениями, например, в/etc/cron.*/
: archive.oreilly.com/pub/post/runparts_scripts_a_note_about.htmlКак вы сказали, расширения файлов Unix являются исключительно информацией. Вам просто нужен ваш скрипт, чтобы иметь правильный shebang и быть исполняемым.
Вы можете не иметь расширения или использовать
.sh
.Я лично использую следующие соглашения, независимо от используемой оболочки (csh, tcsh, bash, sh, ...):
.sh
для классических сценариев, от низкого до высокого класса.источник
Расширения сценариев оболочки весьма полезны. Например, я часто пишу сценарии, которые имеют несколько файлов на нескольких языках (например, bash, awk и lua) в одном каталоге. Если мне нужно искать строку только в файлах bash, расширение делает это очень удобным, чтобы уменьшить количество ложных срабатываний. Или, если я хочу сделать подсчет строк всего моего кода Bash для этого проекта.
Больно вводить расширение при запуске программы, поэтому я также делаю символическую ссылку без расширения на основной исполняемый файл, чтобы редактировать / запускать его без необходимости каждый раз вводить расширение. Симлинки дешевы и просты.
источник
Как уже говорили другие, оболочка не заботится о расширениях. Тем не менее, он позволяет быстро идентифицировать файлы. Я вижу файлы, оканчивающиеся на
.py
или,.sh
и я быстро знаю, какими они (по крайней мере) должны быть. Как говорит Стив, поиск по расширению файла или подсчет строк также являются практическими соображениями.источник