Должен ли я сохранять свои скрипты с расширением .sh?


66

У меня есть несколько функциональных сценариев, и я хочу скопировать их, /usr/binчтобы использовать в качестве обычных команд терминала. Полезно ли использовать их с .shрасширением или я могу сохранить их без расширения?


6
Также, если вы хотите, чтобы эти скрипты были доступны всем пользователям, /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по умолчанию, поэтому сценарии, которые там находятся, можно запускать как любую другую команду оболочки.


4
«Каталог ~ / 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. В моей системе я могу найти только два:

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh
    

    Так что, если вы упаковываете, определенно пропустите расширение.


2
~/binдобавляется $PATHавтоматически, если он существует, нет необходимости добавлять его вручную. Просто создайте каталог, выйдите из системы и снова войдите в систему.
Сергей

5

Просто поместите следующую строку вверху файла:

#!/bin/bash

Итак, этот файл будет автоматически набирать: Shell Script без каких-либо расширений!

Не забудьте дать разрешение на выполнение файла.

Чтобы поставить сценарий так, чтобы его можно было запустить с помощью прямой команды, посетите: Где я должен поместить свой сценарий, чтобы я мог запустить его с помощью прямой команды?


2
Или даже просто #! / Bin / sh, если вам не нужна полная оболочка bash.
flickerfly

Многие операционные системы связывают / bin / sh и / bin / bash
Макс Коплан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.