Почему скрипты хуков действия OpenShift терпят неудачу со странными ошибками?
Я переименовал action_hook из ловушки действий, не относящейся к картриджу (например, post_restart
) для конкретного картриджа (например, post_restart_cron
), а затем столкнулись со странными новыми ошибками, такими как:
/var/lib/openshift/${USER}/app-root/runtime/repo/.openshift/action_hooks/post_restart_cron: line 5: `firstcron-secondcron': not a valid identifier
Файл сценария post_restart_cron имеет вид:
#!/bin/bash
function firstcron-secondcron {
echo in function
}
1 ответ
Проблема заключается в том, что перехватчики действий, не относящиеся к картриджам, по-видимому, запускают bash в режиме не POSIX, который допускает дефисы в именах функций, а перехватчики действий, специфичные для картриджей, запускают bash в режиме POSIX, который не допускает дефисы в именах функций.
Почему специфические для картриджа действия запускают bash в режиме POSIX? Я не уверен на 100%, но я думаю, что происходит следующее:
- v2_cart_model.rb: кассета_hooks запоминает хук как
source <hook filepath>
, - v2_cart_model.rb:do_control_with_directory создает командную строку
set -e; <path to control script> <action> <other args>; source <hook filepath>
, - Это, вероятно, передает эту строку
sh -c
который работает в режиме POSIX и потому, что он используетsource
, он читает сценарий напрямую, а не запускает его в новом процессе (который будет читать#!/bin/bash
линия и бег/bin/bash
который по умолчанию не в режиме POSIX).
Должно быть что-то отличное в кодировке, не относящемся к картриджам, в v2_cart_model.rb
это позволяет избежать шагов, описанных выше.
Мое решение было использовать unset POSIXLY_CORRECT
в моем скрипте, который отключил режим POSIX.
Я отладил эту проблему, запустив set
команда в моем скрипте, которая показала множество переменных bash, ведущих к исследованиям, на которых я использовал процесс исключения.