bash - 如何在隐藏命令的同时读取命令输出?
问题描述
我有一个自定义 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
)。
解决方案
在xargs
手册页中,它指出:
EXIT STATUS
xargs 以以下状态退出:
0 如果成功
123 如果命令的任何调用以状态 1-125 退出
1"
如果进程以 1 状态退出,Xargs 将不会以状态退出。将您的条件更改为:
echo "$GONE_BRANCHES" | xargs git branch -d 2>/dev/null
if [ $? -ne 0 ]; then
推荐阅读
- plot - 在 Mathematica 中带有文本(具有特定位置)的绘图
- c - 什么时候可以通过 char * 相等来比较 C 字符串?
- php - Array_push 返回项目数或最后一个项目数
- android - 没有系统 UI 的 Android Square API posClient.createChargeIntent() 活动?
- javascript - knex 迁移:当 psql 工作正常时,最新无法连接
- python - makefile 以调试模式启动 Flask
- ruby-on-rails - 试图分配给 Capybara 上的只读属性
- python - 过滤后在熊猫中选择前一行的语法
- swift - Swift 添加目标类
- docker - Docker 上运行的 Springboot 无法从资源中读取文件