Я хочу создать небольшой сценарий bash, который проверяет, запускается ли запрос на вытягивание из правильных ветвей или завершается при ошибке, если это не так.
Это была моя последняя попытка / итерация перед тем, как я опубликовал этот вопрос:
if [[ -n $(System.PullRequest.TargetBranch) ]]&&[[ "$(System.PullRequest.TargetBranch)"!="refs/heads/master" ]];
then
echo "$(System.PullRequest.TargetBranch)"!="refs/heads/master"
echo "Branch $(System.PullRequest.TargetBranch) is not master, proceed."
exit 0
fi
if [ -n $(system.pullRequest.sourceBranch) ];
then
if [ "$(system.pullRequest.sourceBranch)"!="refs/heads/hotfixes/"* ]&&[ "$(system.pullRequest.sourceBranch)"!="refs/heads/develop" ];
then
echo "Only hotfixes and develop are allowed to be pulled to the master branch"
exit 1
else
echo "$(system.pullRequest.sourceBranch) is allowed to be pulled to the master branch"
fi
else
echo "variable does not exists"
fi
В настоящее время я тестирую / строю этот скрипт и ожидаю выхода 1 в моем тестовом примере. Но я получаю следующий результат:
refs/heads/master!=refs/heads/master
Branch refs/heads/master is not master, proceed.
Я предполагаю, что я делаю что-то не так с операторами сравнения строк (не говоря уже о том, что исправления запускаются с проверкой позже). Но я не могу понять, что делаю не так. Я пробовал несколько вариантов, некоторые дают другие ошибки. Я понятия не имею, куда двигаться дальше.
Как видно из выходных данных, две сравниваемые строки фактически одинаковы. Так что я не уверен, где что-то не так.
Вам нужны пробелы между переменными и оператором. И вам не нужно для этого сравнения двойные скобки.
Вместо того
if [[ -n $(System.PullRequest.TargetBranch) ]]&&[[ "$(System.PullRequest.TargetBranch)"!="refs/heads/master" ]];
Пытаться
target_branch=$(System.PullRequest.TargetBranch) # to simplify the next lines
if [ -n "$target_branch" ] && [ "$target_branch" != "refs/heads/master" ]; then
# ...