Офіційний стандарт / умова на розширення файлу для скриптів оболонки до джерела


12

Мені було цікаво, чи існує угода про розширення типу файлів для скриптів оболонки, які ви бажаєте джерелом замість запуску. Наприклад:

  1. Якщо я хочу запустити цей скрипт у передпласті.

    ./script.sh 
  2. Якщо я хочу згадати, запустити цей скрипт із поточної оболонки.

    . script.source 

Чи існує умова (як, наприклад, POSIX) для файлів у другому прикладі? Щось на кшталт .sourceабо .sourceme?


Оновлення

Це питання не запитує жодної думки. Я чітко заявив, що хотів би знати, чи є стандартизоване розширення файлів для подібних сценаріїв. Це запитання навіть менш обґрунтоване думкою, ніж це добре отримане запитання щодо аналогічної проблеми ( Використовуйте розширення .sh або .bash для скриптів bash? ).


1
Деякі люди вважають, що сценарії оболонки, на яких можна запустити виконуваний файл (тобто вони починаються з #!/bin/shподібних або подібних, не повинні мати розширення, оскільки користувачеві не потрібно дбати про те, на якій мові написаний базовий сценарій.
the_velour_fog

1
Залежить, для чого це, ви можете мати env, rc, conf тощо
123

1
@ 123 це залежить, іноді , коли ви що - то побудувати Thats корисно і покласти його в $PATH, ви прийшли , щоб використовувати весь час, так що його , як, ps, ls, curlі всі інші команди, то ви починаєте функції завершення збирання оболонки навколо нього, я вважаю , нормально відпустити розширення. Але так, коли ви шукаєте скрипт оболонки, який не виконується сам, я б не chmod +xїх, і я би назвав їх script.sh. Також я часто призначаю розширення виключно тому, що, якщо цього не зробити, я не отримаю виділення синтаксису у своєму редакторі.
the_velour_fog

5
Конвенції немає. Якщо ви перебуваєте в компанії або якщо ви співпрацюєте в рамках спільного проекту (наприклад, відкритого коду), то, можливо, вам повинні відповідати місцеві стандарти, але фактичної конвенції не існує.
Стівен Харріс

1
Слово "конвенція" (означає # 2) - це те, що, ймовірно, веде до відповідей на "думку". Специфікація відкритої групи для джерела не застосовує жодного стандарту іменування.
Джефф Шаллер

Відповіді:


18

Я б використовував .sh(для файлів на shмові POSIX , .bashдля не-сумісних bashфайлів, тобто розширення ідентифікує мову, в яку написано сценарій) для файлів, призначених для пошуку (або загалом не призначених для виконання), і не має розширення для файлів, які призначені для виконання.

Ви також можете додати:

#! /bin/echo Please-source

she-bang, так що при виконанні помилково (хоча я б очікував, що цим файлам не повинні бути надані дозволи на виконання, що вже перешкоджає виконанню), ви отримаєте повідомлення про те, що він повинен бути заміщений.


Ви також можете вийти, якщо сценарій не розміщений ( stackoverflow.com/q/2683279/4694621 )
Матеуш Піотровський

4

У випадку вихідних файлів, я вважаю, що найкращим способом є .conf для файлів, які налаштовують ваш скрипт, і .shlib або .shlibs для файлів, які мають функції або інші утиліти.

Якщо ви хочете не допустити запуску сценарію з неправильною оболонкою, а хешбанг вам недостатньо, ви можете скористатися цим:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi

1
Якщо ви збираєтеся використовувати Лінукс /proc/$$/exe, ви можете також зробити це як case $(readlink "/proc/$$/exe") in */bash)..., хоча тут, я б просто використовувати: if [ -z "$BASH_VERSION" ]. ( echoмає бути echo >&2). (Мені подобаються розширення ( .confабо .shlibsдля файлів sh), хоча це може не допомогти підсвічувачам синтаксису, які покладаються на розширення).
Стефан Шазелас

Так, я бачу це .shlibs, в якійсь програмі, яку я завантажую, але я не пам'ятаю, тому я почав використовувати це. Дуже дякую за пораду, я відредагую питання з версією readlink набагато красивіше. ;-)
Лучано Андресс Мартіні

@ StéphaneChazelas Підсвічування синтаксису може бути ініційовано мета-даними у самих файлах (принаймні для Emacs та Vim), тому вибір розширення імені файлів у цьому відношенні не має значення.
Kusalananda
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.