Должен ли я сохранять свои скрипты с расширением .sh?
66
У меня есть несколько функциональных сценариев, и я хочу скопировать их, /usr/binчтобы использовать в качестве обычных команд терминала. Полезно ли использовать их с .shрасширением или я могу сохранить их без расширения?
Также, если вы хотите, чтобы эти скрипты были доступны всем пользователям, /usr/local/binможет быть лучшим выбором.
Салем,
6
@Salem /usr/binи /usr/local/binоба должны быть доступны всем пользователям, но /usr/local/binлучше для исполняемых файлов, которые не являются частью пакетов.
геррит
Единственное преимущество, которое я видел, это то, что редакторы, такие как vim или nano, знают, как выделить с самого начала, и это все.
рат
1
@rath Я получаю подсветку синтаксиса без расширения, если у меня установлен shebang #!/usr/bin/env bashили #!/bin/bash.
Sparhawk
@Sparhawk Действительно , но я часто забываю его , пока я пытаюсь запустить скрипт;)
Рат
Ответы:
71
Нет, это не очень хорошая практика, вы должны хранить свои скрипты без расширения. Обратите внимание, что скрипты, являющиеся частью пакетов, не имеют расширения .sh , то есть update-grub , а не update-grub.sh . Если вы все еще не уверены, то имейте в виду, что в Руководстве по стилю Google Shell сказано:
Исполняемые файлы не должны иметь расширения (настоятельно рекомендуется ) или расширения .sh. Библиотеки должны иметь расширение .sh и не должны быть исполняемыми.
PS Вам не нужно помещать свой сценарий в /bin. Вы можете создать каталог ~/binи поместить туда свой скрипт. Директория ~/binвключена $PATHпо умолчанию, поэтому сценарии, которые там находятся, можно запускать как любую другую команду оболочки.
«Каталог ~ / bin включен $PATHпо умолчанию» - С каких это пор? Во всяком случае, ~/.local/binвероятно, лучший выбор, поскольку это стандарт.
nyuszika7h
1
Вы имеете в виду «Библиотеки должны иметь расширение .so», верно? Не ш
Кит Уолтерс
3
Сначала @KeithWolters, не я, а Google. Во-вторых, .sh, а не .so, мы говорим о сценариях оболочки, а не о двоичных файлах.
1
Руководство по стилю Google очень специфично для Google. Например, «Bash - единственный язык сценариев оболочки, разрешенный для исполняемых файлов». Очевидно, что внутреннее правило, а не лучшие практики.
Пол Дрейпер
1
@ nyuszika7h проверьте ~ / .profile ... он вставит $ HOME / bin в ваш путь, если каталог существует
Кори Голдберг
9
Я рекомендую использовать, ~/binкоторая автоматически добавляется к вам $PATH, как сказал Сергей . Или /usr/local/bin, который может быть уже на PATH. Тем не мение:
Вы делаете это для себя. Используйте то, что вам удобно. На самом деле, я бы сказал, сохранить расширение, чтобы вам напомнили, что вы запускаете скрипт, так как -
Расширения редки в /usr/bin. В моей системе я могу найти только два:
~/binдобавляется $PATHавтоматически, если он существует, нет необходимости добавлять его вручную. Просто создайте каталог, выйдите из системы и снова войдите в систему.
Сергей
5
Просто поместите следующую строку вверху файла:
#!/bin/bash
Итак, этот файл будет автоматически набирать: Shell Script без каких-либо расширений!
/usr/local/bin
может быть лучшим выбором./usr/bin
и/usr/local/bin
оба должны быть доступны всем пользователям, но/usr/local/bin
лучше для исполняемых файлов, которые не являются частью пакетов.#!/usr/bin/env bash
или#!/bin/bash
.Ответы:
Нет, это не очень хорошая практика, вы должны хранить свои скрипты без расширения. Обратите внимание, что скрипты, являющиеся частью пакетов, не имеют расширения .sh , то есть update-grub , а не update-grub.sh . Если вы все еще не уверены, то имейте в виду, что в Руководстве по стилю Google Shell сказано:
PS Вам не нужно помещать свой сценарий в
/bin
. Вы можете создать каталог~/bin
и поместить туда свой скрипт. Директория~/bin
включена$PATH
по умолчанию, поэтому сценарии, которые там находятся, можно запускать как любую другую команду оболочки.источник
$PATH
по умолчанию» - С каких это пор? Во всяком случае,~/.local/bin
вероятно, лучший выбор, поскольку это стандарт.Я рекомендую использовать,
~/bin
которая автоматически добавляется к вам$PATH
, как сказал Сергей . Или/usr/local/bin
, который может быть уже наPATH
. Тем не мение:Расширения редки в
/usr/bin
. В моей системе я могу найти только два:Так что, если вы упаковываете, определенно пропустите расширение.
источник
~/bin
добавляется$PATH
автоматически, если он существует, нет необходимости добавлять его вручную. Просто создайте каталог, выйдите из системы и снова войдите в систему.Просто поместите следующую строку вверху файла:
Итак, этот файл будет автоматически набирать: Shell Script без каких-либо расширений!
Не забудьте дать разрешение на выполнение файла.
Чтобы поставить сценарий так, чтобы его можно было запустить с помощью прямой команды, посетите: Где я должен поместить свой сценарий, чтобы я мог запустить его с помощью прямой команды?
источник