Seu erro está no seu script. Seu loop for deve ser assim:
for mod in ${mods[@]}; do
O {}
referencia a variável enquanto ()
é para comandos. Segundo, o [@]
faz referência à matriz inteira.
Eu tenho um grupo de módulos que eu preciso carregar na inicialização. Eu segui a documentação para carregar um módulo no entanto eu preciso carregar esses módulos em uma determinada ordem.
Eu tentei criar um script bash que usa um loop for e carrega cada módulo na ordem que eu preciso.
mods=(mod1 mod2 mod3 ... modN)
for mod in $(mods); do
if [ ! -c /dev/input/$mod ] ; then
exec /sbin/modprobe $mod > /dev/null 2>&1
fi
done
Eu também tentei criar um script bash que carrega cada módulo individualmente sem loop.
if [ ! -c /dev/input/mod1] ; then
exec /sbin/modprobe mod1 > /dev/null 2>&1
fi
if [ ! -c /dev/input/mod2 ] ; then
exec /sbin/modprobe mod2 > /dev/null 2>&1
fi
...
if [ ! -c /dev/input/modN ] ; then
exec /sbin/modprobe modN > /dev/null 2>&1
fi
Em ambos os casos, apenas o primeiro módulo é carregado e nenhum dos outros. A ativação de mais depuração do script ( #!/bin/sh -ex
) nos dois casos é interrompida exatamente em:
+ exec /sbin/modprobe mod1
Suponho que o sistema veja que os primeiros módulos estão corretamente carregados e terminam (mas não tenho certeza disso). Como faço para carregar módulos na inicialização em uma ordem especificada?
O comando exec substitui o shell atual por outro comando. Parece ser desnecessário no seu caso. Se você precisar, use-o apenas no último comando.