Когда вы создаете сценарий оболочки, строка shebang игнорируется. Вставив неверный shebang, вы можете предупредить пользователя о том, что скрипт был ошибочно выполнен:
#!/bin/bash source-this-script
# ...
Сообщение об ошибке будет таким:
/bin/bash: source-this-script: No such file or directory
(Произвольное) имя аргумента уже дает строгую подсказку, но сообщение об ошибке все еще не ясно на 100%. Мы можем исправить это с помощью служебного скрипта, source-this-script
который находится где-то в вашем PATH
:
#!/bin/sh
echo >&2 "This script must be sourced, not executed${1:+: }${1:-!}"
exit 1
Теперь сообщение об ошибке будет таким:
This script must be sourced, not executed: path/to/script.sh
Сравнение с другими подходами
По сравнению с другими ответами этот подход требует лишь минимальных изменений в каждом сценарии (а наличие строки shebang помогает в обнаружении типа файла в редакторах и определяет диалект сценария оболочки, так что есть даже преимущества). Недостатком является несколько неясное сообщение об ошибке или (одноразовое) добавление другого сценария оболочки.
Это не мешает явному вызову через bash path/to/script.sh
, хотя (спасибо @muru!).
x
, который просто содержит команду. your-script-to-be-sourced
, то все в порядке, но если он хочет выполнитьbash your-script-to-be-sourced
его, это должно быть запрещено? Какой смысл этого ограничения?