Если я хочу, чтобы в моих сценариях использовалась оболочка bash, действительно ли расширение .bash вызывает bash или это зависит от конфигурации системы / 1-й строки shebang. Если бы оба действовали, но отличались друг от друга, какой бы приоритет?
Я не уверен, заканчивать ли мои сценарии с помощью .sh, чтобы просто указать «сценарий оболочки», а затем в первой строке выбрать оболочку bash (например #!/usr/bin/env bash
), или же просто завершить их с помощью .bash (а также настройки строки 1) ). Я хочу, чтобы Bash был вызван.
.bash
расширение. Кроме того, политика Debian заключается в том, чтобы в пакетах присутствовали сценарии, которые попадают в одну изbin
папок и не имеют расширений.Ответы:
Если вы не используете интерпретатор явно, то вызываемый интерпретатор определяется
shebang
используемым в сценарии. Если вы используете переводчика специально, то переводчику все равно, какое расширение вы дадите для своего сценария. Тем не менее, расширение существует для того, чтобы другим было совершенно очевидно, что это за сценарий.Видите,
.py
расширение скрипта bash не делает его скриптом python.Это всегда
bash
сценарий.источник
Наименование скрипта не имеет ничего общего с тем, как он выполняется.
Строка shebang определяет, какой интерпретатор используется для запуска скрипта.
Мне лично все равно, является ли скрипт sh, bash, perl, каким бы то ни было, поэтому я просто называю его для того, что он делает; Я считаю добавление расширения излишним. Я сделаю,
file scriptname
чтобы узнать, что это за файл, если я хочу это знать.Поэтому, если вы хотите, чтобы ваш скрипт запускался
bash
, используйте#!/bin/bash
в качестве первой строки.источник
.sh
расширения -style означает, что нет необходимости переименовывать его. (По общему признанию, ничто не мешает программе на Си, производящей бинарный файл с.sh
расширением, это просто сбивает с толку.)#!/usr/bin/env bash
для переносимости, обсуждаемое здесь stackoverflow.com/a/10383546/54964