В моем Solaris Illumos я запускаю простой скрипт:

 update_drv -a -i '[myhardware]' [driver]
 svcadm disable stmf
 svccfg import /mypath/myconfig
 svcadm enable stmf

Это не работает и не дает мне ошибки. Служба STMF переходит в режим обслуживания, и я должен перезагрузиться!

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

Можете ли вы объяснить это поведение?

1 ответ1

1

Если первая строка точно такая, как вы показали ее здесь, и вы выполняете строку из консоли в другом каталоге, чем сценарий, из которого вы запускаете сценарий, то наиболее вероятным объяснением является наличие файла в каталоге сценария. у которого есть односимвольное имя файла, которое является одним из символов в "драйвере".

Оболочка видит [driver] как потенциальный глобус и пытается сопоставить его с именами файлов в каталоге. Если он находит тот, который соответствует, он заменяет имя для глобуса. Например, результирующая команда, которая выполняется, может выглядеть так:

update_drv -a -i '[myhardware]' d

которые могут иметь непредвиденные последствия.

Чтобы предотвратить это, поместите кавычки вокруг последнего аргумента, как у предыдущего.

Тем не менее, я подозреваю, что ваши строки в скобках - просто заполнители, и вы пропустили информацию, которая может оказаться полезной при попытке найти потенциальные решения. Кстати, документация Oracle, похоже, указывает на то, что перезагрузка, скорее всего, в любом случае необходима.

Чтобы устранить неполадки в вашем сценарии, добавьте set -x вверху, чтобы вы могли увидеть след. Вы также можете добавить строку вроде echo "here" после первой (или любой) строки, чтобы увидеть, насколько далеко зашел ваш скрипт. Странно, что вы не получаете никаких сообщений об ошибках.

Другая возможность - это испорченное двоичное или плохое оборудование, но это маловероятно, поскольку оно работает в командной строке.

Другое, возможно, основное соображение заключается в том, что среда отличается между сеансом консоли и сценарием. Вы не говорите, запускаете ли вы свой скрипт из командной строки или cron . В этих обстоятельствах часто случается, что PATH отличается или какая-то переменная среды задается по-другому или не устанавливается. Один из способов диагностики , который должен добавить команду как set > script_env.out в вашем сценарии и делать set > cons_env.out в командной строке и diff два файла и искать существенные различия. Вы запускаете скрипт и консольную команду как разные пользователи? Это также имеет эффект.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .