为什么 if [[ ]] 在 groovy 中编写 shell 脚本时不起作用
why if [[ ]] not working when writing shell script inside groovy
案例 1:当 运行 在 Jenkins 管道中跟随 shell 脚本时:
pipeline
{
agent any
stages
{
stage('image')
{
steps {
script {
sh ( returnStdout: true,
script: ''' #!/bin/bash
if [[ 56 > 10 ]]
then
echo 'The variable is greater than 10.'
fi
'''
) }
}
}
}
}
以上抛出异常:
/var/lib/jenkins/workspace/test-job@tmp/durable-f9ee86ef/script.sh: 2: [[: not found
CASE2:但是下面的管道工作得很好:
pipeline
{
agent any
stages
{
stage('image')
{
steps {
sh '''#!/bin/bash
VAR=56
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
fi
'''
}
}
}
}
请向我解释为什么相同的 shell 脚本在上述 CASE2 中有效,而在 CASE1 中却失败了?
第一个脚本以
开头
script: ''' #!/bin/bash
注意'''
和#
之间有一个space。仅当脚本的前两个字节为 #!
时,此模式才会被识别并定义要使用的 shell。如果是其他的,包括<space>#!
,则无法识别,使用默认的shell。除非默认 shell 是 bash,否则 [[
无效。在POSIXshell秒内,只有[
有效。
第二个脚本正确运行的原因是因为'''
和#
之间没有space。
案例 1:当 运行 在 Jenkins 管道中跟随 shell 脚本时:
pipeline
{
agent any
stages
{
stage('image')
{
steps {
script {
sh ( returnStdout: true,
script: ''' #!/bin/bash
if [[ 56 > 10 ]]
then
echo 'The variable is greater than 10.'
fi
'''
) }
}
}
}
}
以上抛出异常:
/var/lib/jenkins/workspace/test-job@tmp/durable-f9ee86ef/script.sh: 2: [[: not found
CASE2:但是下面的管道工作得很好:
pipeline
{
agent any
stages
{
stage('image')
{
steps {
sh '''#!/bin/bash
VAR=56
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
fi
'''
}
}
}
}
请向我解释为什么相同的 shell 脚本在上述 CASE2 中有效,而在 CASE1 中却失败了?
第一个脚本以
开头script: ''' #!/bin/bash
注意'''
和#
之间有一个space。仅当脚本的前两个字节为 #!
时,此模式才会被识别并定义要使用的 shell。如果是其他的,包括<space>#!
,则无法识别,使用默认的shell。除非默认 shell 是 bash,否则 [[
无效。在POSIXshell秒内,只有[
有效。
第二个脚本正确运行的原因是因为'''
和#
之间没有space。