Bash 如何在仍然隐藏命令的同时读取命令的输出?
我有一个自定义Git命令,该命令有条件地删除具有远程连接的本地分支: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
#!/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)
谢谢!问题恰恰是-检查错误代码。这是一个很好的例子,说明为什么检查非零代码是(大多数时候)更好的练习,当非零总是意味着命令失败!