Как прочитать вывод команды, все еще скрывая ее? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть пользовательская команда Git, которая условно удаляет локальные ветви, которые ушли удаленно:

#!/usr/bin/env bash

GONE_BRANCHES=$(git branch -vv | grep 'origin/.*: gone]' | awk '{print $1}')

if [ -z "$GONE_BRANCHES" ]; then
  echo "Could not find any local branches that have a gone remote"
  exit 0
fi

if [ "$1" = "-f" ]; then
  echo "$GONE_BRANCHES" | xargs git branch -D
else
  echo "$GONE_BRANCHES" | xargs git branch -d 2>/dev/null
  if [ $? -eq 1 ]; then
    FAILED_TO_DELETE="true"
  fi
fi

if [ "$FAILED_TO_DELETE" = "true" ]; then
  echo "error: Some local branches are not fully merged."
  echo "If you are sure you want to delete them, run 'git-glean -f'"
fi

Исходя из ответа на этот вопрос Я пытаюсь создать решение, которое по-прежнему выводит результат git branch -d, но если его не удается удалить, проглотить (скрыть) сообщение об ошибке и вместо этого выведите собственное сообщение об ошибке.

Проблема в том, что сообщение об условной ошибке никогда не срабатывает (для тех веток, которые нельзя удалить с помощью git branch -d).

1 Ответ

0 голосов
/ 06 сентября 2018

На странице руководства xargs указано:

СТАТУС ВЫХОДА
xargs выходит со следующим статусом:
0, если это удастся
123, если любой вызов команды завершен со статусом 1-125

Xargs не выйдет со статусом 1", если процесс завершился со статусом 1. Измените ваше состояние на:

 echo "$GONE_BRANCHES" | xargs git branch -d 2>/dev/null
 if [ $? -ne 0 ]; then
...