Почему делает тестирование файла после определения источника сбоя в Выскочке?

Следующий Новомодный сценарий, сохраненный как /etc/init/upstart-test.conf работы:

start on filesystem
stop on on runlevel [!2345]

pre-start script
  set -x
  [ ! -f /etc/default/grub ] && { stop; exit 0; }
  . /etc/default/grub
  # [ ! -f /etc/default/grub ] && { stop; exit 0; }
end script

script
  set -x
  . /etc/default/grub
  true
end script

Запуск его (в соответствии с Ubuntu 14.04.5):

$ sudo initctl start upstart-test
upstart-test start/running, process 2380

Если я некомментирую второй тест существования файла, сбои задания:

$ sudo initctl start upstart-test
initctl: Job failed to start

Почему? Шоу журнала:

$ sudo cat /var/log/upstart/upstart-test.log 
+ [ ! -f /etc/default/grub ]
+ . /etc/default/grub
+ GRUB_DEFAULT=0
+ GRUB_TIMEOUT=0
+ GRUB_TIMEOUT_STYLE=hidden
+ GRUB_RECORDFAIL_TIMEOUT=0
+ lsb_release -i -s
+ GRUB_DISTRIBUTOR=Ubuntu
+ GRUB_CMDLINE_LINUX_DEFAULT=
+ GRUB_CMDLINE_LINUX=
+ GRUB_GFXMODE=auto
+ [ ! -f /etc/default/grub ]

Файл никогда не уходит. Вторая тестовая строка файла идентична; я даже попробовал, и копируйте/вставляйте его и вывод его вручную, чтобы быть уверенными. Что продолжается?

0
задан 3 October 2016 в 12:57

1 ответ

I’ve никогда не использовал выскочку, таким образом, это не может быть целой историей.

Попытка, добавляющая true в конец Вашего сценария перед запуском, точно так же, как другой script в Вашем файле.

, Когда /etc/default/grub существует, Ваш [ команда (который совпадает с test) возвращает ненулевой статус выхода, который является значением “falsy”. Это делает целую команду с && и остальная часть лжи строки, поэтому, как предназначено, правая сторона doesn’t выполненный, но это - последняя команда в сценарии перед запуском, и выскочка может видеть ненулевой статус выхода в последней команде как отказ.

1
ответ дан 28 September 2019 в 11:41

Другие вопросы по тегам:

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