Есть несколько стратегий, которые вы можете использовать для вывода сообщения об ошибке, если вы запускаете сценарий, который должен быть источником.
Вы можете проверить, соответствует ли $0
названию вашего скрипта; если это так, это не источник, поэтому напечатайте сообщение об ошибке и выход:
if [ "${0##*/}" = "myscript" ]; then
echo "Don't run me, source me" >&2
exit 1
fi
(Затем вам нужно будет позаботиться об обновлении всякий раз, когда ваш скрипт переименовывается...)
Вариантом этого может быть проверка $0
на соответствие содержимому /etc/shells
, если это допустимое ограничение (, т.е. сценарии ваших оболочек запускаются только с использованием перечисленных там оболочек, что ни в коем случае обязательство ).
Если ваш скрипт предназначен только для использования в интерактивной оболочке, вы можете проверить это — если он запускается, а не загружается, он не будет в интерактивной оболочке:
case "$-" in
*i*) ;;
*) echo "Don't run me, source me" >&2; exit 1 ;;
esac
blkid
определяет тип контента устройства на основе метаданных контента. В вашем случае /dev/mmcblk0p32
фактически отформатирован как файловая система ext2
.
С другой стороны, тип файловой системы в /proc/mounts
имеет ту же семантику, что и параметрmount
's -t
:, тип с точки зрения ядра (, т. е. драйвер для использования ).
Драйвер файловой системы ext4
может и, очевидно, широко используется для монтирования файловых систем ext2
и ext3
. Изman 5 ext4
:
... They are general purpose file systems that have been designed for extensibility and backwards compatibility. In particular, file systems previously intended for use with the ext2 and ext3 file systems can be mounted using the ext4 file system driver, and indeed in many modern Linux distributions, the ext4 file system driver has been configured to handle mount requests for ext2 and ext3 file systems.
Скорее всего, ваш /dev/mmcblk0p32
был смонтирован с передачей -t ext4
в mount
в командной строке или с использованием ext4
в качестве типа в fstab
.