Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在仍然隐藏命令的同时读取命令的输出?_Bash_Git_Error Handling - Fatal编程技术网

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

Bash 如何在仍然隐藏命令的同时读取命令的输出?,bash,git,error-handling,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

我有一个自定义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分支-d
的结果,但如果它无法删除一个分支,则吞下(隐藏)错误消息,并返回一个自定义错误消息


问题是,条件错误消息从未触发(对于那些无法使用
git branch-d
删除的分支)。

xargs
手册页中,它指出:

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

如果进程以1状态退出,Xargs将不会以
1“
状态退出。请将条件更改为:

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

这似乎是您当前正在做的。什么不起作用?更新问题以澄清,抱歉,谢谢!一旦我发现这种奇怪的行为,将标记为已接受…无论出于何种原因,该命令似乎一开始就注意到没有完全合并的分支(并输出错误消息)然后仍然删除分支:困惑:--也就是说,输出是
一些本地分支没有完全合并…
然后是
删除的分支$branchName(was$commitHash)
谢谢!问题恰恰是-检查错误代码。这是一个很好的例子,说明为什么检查非零代码是(大多数时候)更好的练习,当非零总是意味着命令失败!