Невозможно заставить скрипт принимать переменные

Устройство loopв основном управляется с помощью команды losteup. Итак, losetup -aдает вам обзор используемых петлевых устройств и прикрепленных файлов. Команда mountможет монтировать только блочное устройство . Контурное устройство может создать виртуальное блочное устройство из файла (символьного устройства ).

На самом деле существует большая разница между этими командами, потому что в старых системах Linux mountне мог распознать файл как правильное устройство для монтирования, но во время выполнения команды монтирования с большим количеством функций, поэтому теперь он может самостоятельно решить попытаться вызвать команду lossup и смонтировать результат. Но если у вас есть образ всего диска не в формате iso, а, например. с MBR в начале команда mount не смогла его распознать, и вам нужно найти пригодный для использования раздел (, например. с помощью команды parted disk_image.raw unit B print)самостоятельно, а затем смонтируйте его с полной опцией mount comman как:

mount disk_image.raw /mntpoint/ -o loop,offset=${OFFSET_of_PARTITION}

В этом синтаксисе не указано устройство петли, и предполагается, что система выбирает первое свободное (/dev/loop0, /dev/loop1и т. д. )Среди других новых возможностей команды mount то, что вам не нужно указывать тип файловой системы монтируемого блочного устройства (в вашем случае -t iso9660), если поддержка файловой системы была установлена.

1
10.06.2021, 17:19
2 ответа

Первая строка должна быть:

NAME=$(hostname)_$(date +"%FT%T")

В том виде, как он у вас есть, он будет использовать подстановку команд и обрабатывать вывод как команду, и, поскольку он не существует, вы получите сообщение об ошибке.

Последняя строка может быть вот такой:

tar -cjvf "$NAME.tar.bz2" testing testing2

В будущем вы можете использовать shellcheck.net для проверки своих скриптов.

0
28.07.2021, 11:25

Если это ваши первые попытки написания сценариев оболочки, я бы рекомендовал использовать shellcheck для "проверки -чтения" сценариев оболочки; она также доступна как отдельная программа во многих дистрибутивах Linux.

Что касается проблем, с которыми вы столкнулись :Похоже, вы смешиваете синтаксис оболочки и Makefile для разыменования переменных. В оболочке $NAME— это значение переменной NAME, тогда как $(NAME)попытается выполнить команду NAMEи вернуть вывод этой команды -, так что -называется «подстановкой команды» (, который вы правильно использовали при заполнении NAMEв вашем обходном пути «проверки по кусочкам» ).

Итак, исправленный скрипт будет выглядеть так

NAME="$(hostname)_$(date +"%FT%T")"
tar -cjvf "$NAME.tar.bz2" testing testing2

В качестве примечания -

  • Все -имена переменных в верхнем регистре не должны использоваться, если вы не экспортируете их как переменные среды в оболочку, поскольку в противном случае они могут конфликтовать и перезаписывать важные переменные среды, такие как $PATH.
  • убедитесь, что вы правильно заключаете в кавычки ваши ссылки на переменные , в частности, когда переменная содержит имя файла . В противном случае ваш сценарий оболочки может наткнуться на имена файлов со специальными символами, такими как пробелы, *, ?, символы новой строки (да, даже они разрешены в именах файлов! )и тому подобное.

Я бы порекомендовал вам взглянуть на

для дальнейшего чтения.

1
28.07.2021, 11:25

Теги

Похожие вопросы