Использовать вывод команды в качестве кода выхода

475
Sven Reuter

Для моих сценариев непрерывной интеграции я хочу проверить, не ветка git не синхронизирована с веткой master. Поэтому я использую

git rev-list --left-right --count master...my-branch-name 

Это вернет что-нибудь. лайк

1 3 

(3 коммитов впереди мастера, 1 сзади)

Добавление | cut -f1даст мне только первый номер (фиксирует за мастером).

Теперь я хочу выйти из скрипта только с этим номером, потому что 0 коммитов - это успех, все остальные должны выдавать ошибку.

Как я могу это сделать? Я старался

exit 'git rev-list --left-right --count master...my-branch-name | cut -f1' 

но это поднимает

/ bin / bash: строка 66: выход: git rev-list --left-right --count master ... my-branch-name | cut -f1: требуется числовой аргумент

Есть ли лучшая практика для этого?

6

1 ответ на вопрос

5
nKn

Просто измените свою строку:

exit 'git rev-list --left-right --count master...my-branch-name | cut -f1' 

чтобы:

exit `git rev-list --left-right --count master...my-branch-name | cut -f1` 

Все, что находится между `кавычками, будет выполнено и возвращено сценарию bash, так что вы можете делать с ним все, что захотите, в том числе назначать его переменной.

Используйте `$ (...)` вместо обратных кавычек: намного легче увидеть разницу. glenn jackman 6 лет назад 4
Возможно, да, то, как я написал, это исторический способ совместимости, способ `$ (...)` более новый и предположительно более "совместимый" между различными оболочками, но оба должны работать без проблем в bash. nKn 6 лет назад 0
Обратные ходы в порядке для Баш, но плохо для людей. Мне потребовалось несколько секунд, чтобы определить разницу в вашем ответе. glenn jackman 6 лет назад 1
Задники также сложнее гнездиться. Barmar 6 лет назад 0