Чи потрібно зберігати свої скрипти з розширенням .sh?


66

У мене є кілька функціональних сценаріїв, і я хочу скопіювати їх, /usr/binщоб використовувати їх як звичайні термінальні команди. Чи є хорошою практикою використовувати їх із .shрозширенням чи можна зберегти їх без розширення?


6
Крім того, якщо ви хочете, щоб ці сценарії були доступні для всіх користувачів, /usr/local/binможе бути кращим вибором.
Салем

6
@Salem /usr/binі /usr/local/binмає бути доступним для всіх користувачів, але /usr/local/binкраще для виконуваних файлів, які не входять до пакетів.
Герріт

Єдина користь, яку я бачив, - це те, що редактори, такі як vim чи nano, знають, як виділити з самого початку, і це стосується цього.
rath

1
@rath Я отримую підсвічування синтаксису без розширення, якщо у мене shebang встановлено на #!/usr/bin/env bashабо #!/bin/bash.
Sparhawk

@Sparhawk Дійсно, але я часто забуваю це, поки не намагаюся запустити сценарій;)
rath

Відповіді:


71

Ні, це не є хорошою практикою, ви повинні зберігати свої сценарії без розширення. Зауважте, що скрипти, що входять до пакетів, не мають розширення .sh , тобто update-grub , not update-grub.sh . Якщо ви все ще не впевнені, то майте на увазі, що в Посібнику стилю Google Shell написано:

Виконані файли не повинні мати розширення (настійно бажано) або розширення .sh. Бібліотеки повинні мати розширення .sh і не повинні виконуватися.

PS Вам не потрібно вводити свій сценарій /bin. Ви можете створити каталог ~/binі помістити там свій скрипт. Каталог ~/binвключений у програму $PATHза замовчуванням, тож розміщені там скрипти можна запускати як будь-яку іншу команду оболонки.


4
"Каталог ~ / bin $PATHза замовчуванням включений " - З коли? У всякому разі, ~/.local/binце, мабуть, кращий вибір, оскільки це стандарт.
nyuszika7h

1
Ви маєте на увазі "Бібліотеки повинні мати розширення .so", правда? Не ш.
Кіт Волтерс

3
@KeithWolters по-перше, не я, а Google. По-друге, .sh, не. Значить, ми говоримо про сценарії оболонки, а не про двійкові файли.

1
Посібник зі стилів Google дуже специфічний для Google. Наприклад, "Bash є єдиною мовою сценаріїв оболонок, дозволеною для виконуваних файлів." Ясна внутрішня норма, а не найкраща практика.
Пол Дрейпер

1
@ nyuszika7h перевірити ~ / .profile ... він вставляє $ HOME / bin на ваш шлях, якщо каталог існує
Corey Goldberg

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

Отже, цей файл буде автоматично введений: сценарій оболонки без будь-якого розширення!

Не забудьте дати дозвіл на виконання файлів.

Щоб поставити сценарій таким чином, який може бути запущений за допомогою прямої команди, відвідайте: Де я повинен розмістити свій скрипт, щоб я міг запустити його прямою командою?


2
Або навіть просто #! / Bin / sh, якщо вам не потрібна повна оболонка bash.
мерехтіння

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