Рейтинг:-2

Моя труба не работает в моем выражении if

флаг cn

У меня есть этот скрипт для проверки статус git для всех моих репозиториев:


find / -type d -name .git 2>&- | 
при чтении gitFolder; делать
    если [[ $gitFolder == *"/Temp/"* ]]; тогда
        Продолжить;
    фи
    если [[ $gitFolder == *"/Trash/"* ]]; тогда
        Продолжить;
    фи
    если [[ $gitFolder == *"/opt/"* ]]; тогда
        Продолжить;
    фи
    родитель = $ (имя каталога $ gitFolder);
    если [[ `git -C $parent status --porcelain` ]]; тогда
        эхо "";
        эхо $родитель;
        git -C $родительский статус --фарфор
    else if [[ $(git -C $parent status | grep forward) ]]; тогда
        эхо "";
        echo "$parent еще не отправлен";
    фи
сделано 

Но это не работает. Если я удалю второй еще блок тогда это работает.

В основном я хочу знать, есть ли какие-либо изменения в репозитории git (сначала, если) или он опережает мастер (второй, если).

Как мне изменить это второе условие if?

флаг hr
Пожалуйста, постарайтесь быть более описательным, чем "не работает" - что должно произойти и что происходит вместо этого?
Lorenz Keel avatar
флаг gr
Замените `else if` на `elif`. Я не проверял код на возможные дальнейшие ошибки
Рейтинг:2
флаг gr

Баш если... иначе если... иначе заявление принимает следующий вид:

если УСЛОВИЕ1; тогда
  ЗАЯВЛЕНИЯ1
Элиф УСЛОВИЕ1; тогда
  ЗАЯВЛЕНИЯ2
еще
  ЗАЯВЛЕНИЯ3
фи

Конкретная ошибка в вашем скрипте заключается в использовании неправильного ключевого слова. иначе, если вместо правильного Элиф.

Если CONDITION1 оценивается как True, STATEMENTS1 будет выполнен. Если CONDITION2 оценивается как True, STATEMENTS2 будет выполнен. Если ни одна из тестовых команд не оценивается как True, выполняется CONDITION3.

Условия оцениваются последовательно. Как только условие возвращает True, остальные условия не выполняются, а управление программой перемещается в конец операторов if.

В операторе может быть одно или несколько предложений elif.

Предложение: вы можете установить шеллчек package для проверки вашего кода bash. Видеть https://github.com/koalaman/shellcheck для справки.

Рейтинг:-1
флаг in

Попробуйте заменить

    else if [[ $(git -C $parent status | grep forward) ]]; тогда

с

    иначе, если git -C $parent статус | grep вперед; тогда

Вы также можете добавить -q грэп.

Это работает путем замены [[ тест с голой командой. Последняя команда в конвейере (grep) завершается с истинным или ложным значением, в зависимости от того, нашел он что-нибудь или нет. -q option говорит ему возвращаться только с этим значением и фактически не печатать то, что он нашел.

Примечание. В вашем скрипте есть и другие ошибки, которые также необходимо исправить.

Saeed Neamati avatar
флаг cn
Я этого не понимаю. Где **проверка** во второй строке? Похоже на JavaScript.
Saeed Neamati avatar
флаг cn
Не работало. Выдает мне синтаксическую ошибку. Почти «готово».
terdon avatar
флаг cn
@SaeedNeamati, пожалуйста, не говорите нам «не сработало» или «синтаксическая ошибка». Отредактируйте свой вопрос и покажите нам, какие _точные_ ошибки вы получаете. Мы не можем просто угадать, что вам нужно.
Saeed Neamati avatar
флаг cn
@terdon, я написал ошибку. `Синтаксическая ошибка, почти готово`. Однако мне удалось заставить его работать, изменив подход.
user10489 avatar
флаг in
Вам нужно будет объединить несколько ответов здесь, чтобы получить рабочее решение, поскольку у вас есть несколько ошибок. Ошибка почти завершена: один или несколько пропущенных `fi`, чтобы закрыть ваши `if`s. Или замените `else if` на `elif`
флаг lu
`элиф` - это путь.
user10489 avatar
флаг in
Я думал, что elif - это функция bash, но похоже, что POSIX добавил ее, когда я не смотрел или что-то в этом роде. С учетом этого, вероятно, нет проблем с обратной совместимостью, и `elif` действительно подходит.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.