Давайте проанализируем его:
not_if {"`sudo sh /home/scripts/getStampedDisk.sh test`" == ''}
- Not_if ... Совершенно очевидно, что это охраннику
{
открытие блока
"
открытия строки
- обратные кавычки открытия
- команда
- закрытие кавычки и цитат
==
оператор
''
постоянная пустая строка
}
закрытие блок
Это много операций, чтобы проверить у вас есть пустая строка. Вывод из обратных циклов не гарантированно будет действительно пустым (например, он может иметь новую строку), а затем вы сравниваете его с произвольной пустой строкой (не ноль, это строка с ничем). Есть много способов, которыми это может испортиться, и довольно сложно отлаживать непечатаемые символы.
Однако у снарядов уже есть оператор для этого, это -z
для обычного bash.
Цитирование Баш документация:
-z string
True if the length of string is zero.
Другой Хелпер $()
оценить команду внутри сценария
Последний один [[ ]]
строительство, чтобы сказать, что мы используем оператор, а не команда.
Все вместе вы в конечном итоге с исполнением охранником команды при выраженном в виде строки (Documentation on guards here)
not_if '[[ -z $(sudo sh /home/scripts/getStampedDisk.sh test) ]]'
Цитаты из караульной документации:
Атрибут охранника принимает либо значение строки или Значение блока Ruby:
- Строка выполняется как команда оболочки. Если команда возвращает 0, применяется защита . Если команда возвращает любое другое значение, тогда атрибут защиты не применяется.
- Блок выполнен как код Ruby, который должен возвращать либо true, либо false. Если блок возвращает true, применяется атрибут guard . Если блок возвращает false, атрибут защиты не применяется.
Если вы не используете рубин в охранника, не используйте блок, вы просто добавлять слои ведьма вам неприятности, особенно, когда вы пытаетесь сравнить удобства для печати или пустые строки и отлаживать сложнее, попробуйте придерживаться стандартных команд оболочки, если вам нужно вызвать команду или скрипт, вы можете протестировать ее на консоли и быть уверенным, что это не проблема позже.
Каков результат этого? – Joop
отредактировал мой вопрос .. пожалуйста, проверьте .. я не могу понять, как шеф-повар работает это внутренне .. – SASI