Коли ви подаєте джерело сценарію оболонки, рядок 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
це слід заборонити? У чому сенс цього обмеження?