我将一个非盒式磁带操作挂钩(例如post_restart
)中的action_hook重命名为特定于磁带盒(例如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
}
答案 0 :(得分:0)
问题是非特定于盒式磁带的操作挂钩显然在非POSIX模式下运行bash,它允许函数名中的连字符,但特定于磁带盒的操作挂钩在POSIX模式下运行bash,这不允许在函数名中使用连字符。 / p>
为什么特定于磁带盒的操作挂钩在POSIX模式下运行bash?我不是百分百肯定,但我认为会发生以下情况:
source <hook filepath>
。set -e; <path to control script> <action> <other args>; source <hook filepath>
。sh -c
,因为它使用source
,它会直接读取脚本而不是在新进程中运行它(这将读取{{1}行并运行#!/bin/bash
,默认为非POSIX模式)。 /bin/bash
中的非盒式磁带特定代码路径必须有不同之处,以避免上述步骤。
我的解决方案是在我的脚本中使用v2_cart_model.rb
来禁用POSIX模式。
我通过在我的脚本中运行unset POSIXLY_CORRECT
命令调试了这个问题,该命令显示了各种bash变量导致我使用了消除过程的调查。