如何在仍然隐藏命令的同时读取命令的输出?

时间:2018-09-06 10:14:01

标签: bash git error-handling

我有一个自定义的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

基于对this question的回答,我试图构建一个解决方案,该解决方案仍输出git branch -d的结果,但是如果无法删除该结果,请吞下(隐藏)错误消息并回显而是自定义错误消息。

问题是条件错误消息永远不会触发(对于那些无法用git branch -d删除的分支)。

1 个答案:

答案 0 :(得分:3)

xargs联机帮助页中指出:

  

退出状态
    xargs退出并显示以下状态:
    如果成功,则为0
    123,如果以状态1-125退出命令的任何调用

如果进程以1状态退出,则

Xargs将不会以1"状态退出。将您的条件更改为:

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