为什么OpenShift操作挂钩脚本会因奇怪的错误而失败?
我将非盒式磁带特定的操作挂钩(例如为什么OpenShift操作挂钩脚本会因奇怪的错误而失败?,openshift,Openshift,我将非盒式磁带特定的操作挂钩(例如post\u restart)重命名为盒式磁带特定的操作挂钩(例如post\u restart\u cron),然后遇到奇怪的新错误,例如: /var/lib/openshift/${USER}/app-root/runtime/repo/.openshift/action_hooks/post_restart_cron: line 5: `firstcron-secondcron': not a valid identifier 脚本文件post_resta
post\u restart
)重命名为盒式磁带特定的操作挂钩(例如post\u restart\u 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
}
问题在于,非盒带特定的操作挂钩显然在非POSIX模式下运行bash,该模式允许在函数名中使用连字符,但盒带特定的操作挂钩在POSIX模式下运行bash,该模式不允许在函数名中使用连字符 为什么特定于盒带的操作挂钩在POSIX模式下运行bash?我不是100%确定,但我认为会发生以下情况:
源代码
set-e;来源
sh-c
,因为它使用source
,所以它直接读取脚本,而不是在新进程中运行它(这将读取#!/bin/bash
行并运行/bin/bash
,默认情况下非POSIX模式)v2\u cart\u model.rb
中非盒式磁带特定的代码路径必须有所不同,以避免上述步骤
我的解决方案是在禁用POSIX模式的脚本中使用unset POSIXLY_CORRECT
我通过在脚本中运行set
命令调试了这个问题,该命令显示了导致我使用消除过程进行调查的各种bash变量