Я хочу создать небольшой сценарий 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
# ...