Есть ли способ, которым оболочка Bash выдает ошибку времени выполнения при неправильном использовании целочисленной переменной (при попытке сохранить строку в этой переменной)?

Некоторые команды кикстарта представляют задачи установки, которые должны быть выполнены до запуска основного установщика, поэтому они обрабатываются только внутри dracut. Те, о которых я знаю, это:

  • Установите режим отображения :text, graphical,cmdline
  • Загрузить диски с драйверами:driverdisk
  • Загрузить обновления установщика:updates
  • Проверить установочный носитель:mediacheck

Таким образом, они, вероятно, не будут работать в %include, если цель %includeне видна внутри dracut(, например, если вы внедрили ее в initrd или поместили на то же устройство, что и кикстарт...)

Если вам нужно использовать один из них, но он не может быть в основном кикстарте, вы можете попробовать вместо этого использовать соответствующие параметры загрузки :

  • Установите режим отображения :inst.text, inst.graphical,inst.cmdline
  • Загрузить диски с драйверами:inst.dd=
  • Загрузить обновления установщика:inst.updates=
  • Проверить установочный носитель:rd.live.check

0
19.04.2020, 21:18
2 ответа

Способ выдать ошибку:

set -u
# or
set -o nounset

Тогда:

$ set -u
$ declare -i age
$ age=hello
bash: hello: unbound variable

Однако это не всегда будет "работать" так, как вы ожидаете, если это не несвязанная переменная:

$ hello=world
$ age=hello
bash: world: unbound variable

$ hello=42
$ age=hello
$ echo $age
42

$ hello=""
$ age=hello
$ echo $age
0

Я пришел к выводу, что в declare -iочень мало ценности. Он позволяет вам выполнять арифметические действия без арифметического синтаксиса, и я думаю, что это только добавляет путаницы.

5
19.03.2021, 02:27

Нет, у вас не может быть исключения проверки типа во время выполнения в bash. Причина в том, что когда вы используете declare -i, вы только говорите bashвыполнить арифметическое расширение $((...))для любого значения, присвоенного переменной. Это больше о значении, чем о переменной.

Так же, как

$ echo  $(("hello"))
0
$ echo  $(("hello" + 2))
2

при назначении "привет"

$declare -i myvar
$ myvar="hello"
$ echo $myvar
0

Вы можете самостоятельно проверить, является ли присваиваемое значение действительным числом. Существует много способов сделать это .

1
19.03.2021, 02:27

Теги

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