Рейтинг:3

Расширение файла сценария Bash

флаг cn

У меня есть сервер, на котором у меня есть разные виды скриптов.

Эти сценарии должны быть открыты с помощью различных оболочек, таких как:

ш ./do_one_thing.sh
Баш ./do_another_thing.sh

в расширение опасно для меня, особенно если я не подключался к серверу в течение длительного времени. Или если кто-то незнакомый должен сделать замену.
Я могу случайно выполнить ш ./do_another_thing.sh

Будет ли иметь значение, если я назову свой сценарий do_another_thing.bash? Это создаст еще один уровень защиты от дурака.

Кроме того, я хотел бы знать, для чего предназначена строка shebang в начале, кроме напоминания администратору (#!/бин/баш), если он будет перезаписан ш ./do_another_thing.sh в любом случае. Мне кажется такое, что должен быть более правильный способ выполнения скрипта, распознающий шебанг.

Рейтинг:8
флаг ru

Shebang в верхней части файла определяет, какой интерпретатор запускается при запуске ./имя_файла (при условии, что он исполняемый).

#!/бин/кошка
тест 123

просто распечатает вышеуказанный файл, когда вы запустите его с помощью ./имя_файла, как это будет работать кот имя_файла.

#!/бин/эхо
Привет, мир

будет просто печатать имя_файла, потому что он работает эхо имя_файла.

Установка для этого значения bash или sh позволит вам выбрать, с каким интерпретатором он будет работать, если вы не забудете вызвать его с помощью ./имя_файла.

При этом, используя для ш и .баш для bash работает нормально, хотя и нестандартно. Расширения файлов довольно плавны в Linux.

typecasto avatar
флаг ru
@ user68186 Ой! Исправлено сейчас.
paul garrett avatar
флаг cx
Мало того, что расширения файлов «изменчивы», я думаю, что они в основном игнорируются, не так ли?
флаг in
@paulgarrett Это во многом зависит от конкретного приложения, но большинство вещей почти на любой платформе, кроме Windows, macOS или Android, которые заботятся о типах файлов, смотрят на содержимое или метаданные файлов и возвращаются к расширениям файлов только в том случае, если они не могут в противном случае определите тип файла.
Рейтинг:5
флаг ng

Строка shebang определяет интерпретатор, в данном случае /бин/баш. Если вы всегда собираетесь использовать один и тот же интерпретатор для одного сценария, именно здесь вы определяете это, что избавляет вас от необходимости определять его в своей команде. Нет смысла использовать shebang для определения интерпретатора, который вы не хотите использовать для этого скрипта.

Я действительно не понимаю, почему одно расширение может быть более опасным, чем другое, или как вы можете случайно ввести все это. Если вы используете завершение с помощью табуляции, любое расширение будет выполнять автозаполнение, так что это не защитит от неуклюжести. Расширение полезно, так что вы можете определить/запомнить, что это за файл.

В любом случае, неважно, как вы назовете скрипт. Он даже не нуждается в расширении.

Есть хороший вопрос о Unix&Linux который имеет больше информации об этом.

Рейтинг:1
флаг cn

Если имя файла с установленными битами разрешения на выполнение введено в командной строке или если имя такого файла передано одному из вызовов вариантов exec*() библиотеки времени выполнения C, ядро ​​Linux попытается загрузить и выполнить его.

Первое, что делает ядро ​​Linux, — читает первые несколько байтов файла в поисках известных «магических» последовательностей. Одна из этих магических последовательностей также может быть интерпретирована как строка ASCII "#!" также известный как «hash bang» и сокращенно «shebang». Когда загрузчик увидит это, он интерпретирует оставшуюся часть строки как имя другого файла для exec, передав первый файл в качестве аргумента. Другим магическим значением является "\x7fELF", который представляет собой классический двоичный исполняемый файл, такой как, скажем, сам /bin/sh. Обратите внимание, что по умолчанию для загрузчика ядра, если в файле нет узнаваемой магии, используется exec /bin/sh и передача ему имени файла в качестве первого аргумента - эквивалент наличия шебанга "#!/bin / ш".

По сути, пометка сценария как исполняемого с помощью chmod +x ./do_one_thing.sh вместе с шебангом "#!/bin/sh" эквивалентно ш ./do_one_thing.sh. «Расширение файла» или другие концепции DOS действительно не имеют значения за пределами DOS, ее предков, таких как CP / M, и ее потомков, таких как Microsoft Windows.

Если вам нужен лучший уровень защиты от дурака, пометьте файлы как исполняемые и используйте соответствующий шебанг. Не полагайтесь на людей, чтобы они поступали правильно.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.