Некоторые команды кикстарта представляют задачи установки, которые должны быть выполнены до запуска основного установщика, поэтому они обрабатываются только внутри dracut
. Те, о которых я знаю, это:
text
, graphical
,cmdline
driverdisk
updates
mediacheck
Таким образом, они, вероятно, не будут работать в %include
, если цель %include
не видна внутри dracut
(, например, если вы внедрили ее в initrd или поместили на то же устройство, что и кикстарт...)
Если вам нужно использовать один из них, но он не может быть в основном кикстарте, вы можете попробовать вместо этого использовать соответствующие параметры загрузки :
inst.text
, inst.graphical
,inst.cmdline
inst.dd=
inst.updates=
rd.live.check
Способ выдать ошибку:
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
очень мало ценности. Он позволяет вам выполнять арифметические действия без арифметического синтаксиса, и я думаю, что это только добавляет путаницы.
Нет, у вас не может быть исключения проверки типа во время выполнения в bash
. Причина в том, что когда вы используете declare -i
, вы только говорите bash
выполнить арифметическое расширение $((...))
для любого значения, присвоенного переменной. Это больше о значении, чем о переменной.
Так же, как
$ echo $(("hello"))
0
$ echo $(("hello" + 2))
2
при назначении "привет"
$declare -i myvar
$ myvar="hello"
$ echo $myvar
0
Вы можете самостоятельно проверить, является ли присваиваемое значение действительным числом. Существует много способов сделать это .