Використовуйте розширення .sh або .bash для скриптів bash?


36

(Див. Використання #! / Bin / sh або #! / Bin / bash для сумісності Ubuntu-OSX та простоти використання та POSIX )

Якщо я хочу, щоб мої сценарії використовували оболонку bash, чи використовує розширення .bash, фактично викликає bash або це залежить від конфігурації системи / 1-ї строки shebang. Якби обидва були діючими, але різними, що мала б перевагу?

Я не впевнений, чи слід закінчувати мої сценарії .sh просто вказати "скрипт оболонки", а потім у першому рядку вибрати оболонку bash (наприклад #!/usr/bin/env bash), чи просто закінчити їх .bash (а також налаштування рядка 1 ). Я хочу, щоб баш був викликаний.


3
Я не думаю, що я ніколи не бачив .bashрозширення. Крім того, в політиці Debian є сценарії в пакунках, які розташовуються в одній з binпапок, щоб вони не мали розширень.
муру

Відповіді:


19

використовує розширення .bash, фактично викликає bash або це залежить від конфігурації системи / 1-ї строки shebang.

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

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a bash script"

Дивіться, .pyрозширення на скрипт bash не робить його сценарієм python.

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a bash script"
                                ^
SyntaxError: invalid syntax

Це завжди bashсценарій.

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script

23

Іменування сценарію не має нічого спільного з тим, як він працює.

Рядок shebang визначає, який інтерпретатор використовується для запуску сценарію.

Мені особисто байдуже, чи сценарій sh, bash, perl, будь-що, тому я просто називаю його тим, що він робить; Я вважаю, що додавання розширення є зайвим. Я зроблю, file scriptnameщоб дізнатися, що таке файл, якщо я хочу це знати.

Тож якщо ви хочете, щоб ваш сценарій запускався bash, використовуйте #!/bin/bashяк перший рядок.


4
Крім того, якщо вибір реалізації сценарію коли-небудь змінюється (скажімо, він переписаний на Python, Perl, C ...), відсутність .shрозширення -style означає, що не потрібно перейменовувати його. (Правда, ніщо не заважає програмі C створювати бінарний файл з .shрозширенням, це було б просто заплутано.)
Стівен Кітт

2
Використання #!/usr/bin/env bashдля портативності, обговорюваної тут stackoverflow.com/a/10383546/54964
Léo Léopold Hertz 준영

4
@wurtel (запізнілий коментар, гаразд?) Додавання розширення imho далеко не зайве. Більшість редакторів підтримують підсвічування синтаксису на основі розширення, плюс має сенс негайно бачити тип файлу. Чіткість та зрозумілість мають велике значення.
RolfBly

@RolfBly: Редактори, які я використовую, розпізнають шебанг та надають підкреслення синтаксису. Чіткість корисна, але більшу частину часу ми хочемо виконати команду, і це добре, якщо мені доведеться набирати менше і якщо мені не потрібно пам’ятати мову його реалізації.
Хонтварі Левенте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.