Во время Jenkins-билда – скрипт деплоя возвращает ошибку:
... [jm-cms-transform-layer-build] Running shell script + [[ -d config ]] /var/jenkins_home/workspace/jm-cms-transform-layer-build@tmp/durable-6569c8ce/script.sh: 2: /var/jenkins_home/workspace/jm-cms-transform-layer-build@tmp/durable-6569c8ce/script.sh: [[: not found ...
Причина в том, что Jenkins использует во время билда sh
(docker.image('node')
), а не bash
, а sh
не поддерживает многие возможности bash
:
[simterm]
root@jm-webapp-ci-temp:/tmp# sh # [[ -e filename ]] || echo $? sh: 1: [[: not found 127 # bash root@jm-webapp-ci-temp:/tmp# [[ -e filename ]] || echo $? 1
[/simterm]
Поэтому, вместо проверки через [[...]]
– используем test
:
[simterm]
# test -e filenmae || echo $? 1
[/simterm]
И немного проверки:
[simterm]
root@jm-webapp-ci-temp:/tmp# type -a [[ [[ is a shell keyword root@jm-webapp-ci-temp:/tmp# type -a [ [ is a shell builtin [ is /usr/bin/[ root@jm-webapp-ci-temp:/tmp# type -a test test is a shell builtin test is /usr/bin/test
[/simterm]
Видим, что [[
– это shell keyword:
[simterm]
# type -a [[ [[ is a shell keyword
[/simterm]
И смотрим man
:
[simterm]
root@jm-webapp-ci-temp:/tmp# man 1 bash | grep "\[\[" ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]] [[ expression ]] expansion are not performed on the words between the [[ and ]]; tilde expansion, parameter and variable expansion, arithmetic expansion, command substitution, process substitution, and quote removal are performed. When used with [[, the < and > operators sort lexicographically using the current locale. ...
[/simterm]