git - 复制标准输入的干净方法 - 供 git pre-push 使用?
问题描述
我想将标准输入传递给两个不同的进程。有哪些不错的干净方法可以做到这一点?
(我提出了一种基于临时文件的方法作为下面的答案,但也许有更好的方法?)
GitHub 的“git lfs pre-push”预推送挂钩读取标准输入。我想安装第二个预推送检查,例如我在 pre-push.sample 中找到的 WIP 检查。这意味着我需要以某种合理的方式保存标准输入,以便“git lfs pre-push”和“while read local_ref local_sha remote_ref remote_sha”循环都可以读取提交。
解决方案
您可以使用tee
输出过程替换。
在这里,为了清楚起见,我将单个检查代码放入函数中:
check1() {
git lfs pre-push "$@"
}
check2() {
while read -ra variables; do
: ...
done
}
# redirecting to /dev/null so you don't get the original input as well
tee >(check1) >(check2) >/dev/null
我不确定这些限制,但是您可以通过这种方式进行任意大量的检查:
tee >(check1) \
>(check2) \
>(check3) ...
一个演示:
check1() { while IFS= read -r n; do echo $((n*5)); done; }
check2() { while IFS= read -r line; do echo ">>>$line<<<"; done; }
seq 101 100 1101 | tee >(check1) >(check2) >/dev/null
输出
505
>>>101<<<
1005
1505
2005
2505
3005
3505
>>>201<<<
4005
4505
>>>301<<<
5005
>>>401<<<
5505
>>>501<<<
>>>601<<<
>>>701<<<
>>>801<<<
>>>901<<<
>>>1001<<<
>>>1101<<<
由于这两项检查都在子外壳中运行,因此输出顺序是不确定的。
推荐阅读
- excel-formula - 当值> 0时如何获得最小值?
- sql - 从多个表中获取 MAX 日期时间事件,并按 ID 输出最近事件的简单列表
- angular - 角度路由未打开所需的默认 url
- python-3.x - 理解类和 OOP
- python - 在 python 中使用正则表达式排除模式
- python - 为什么脚本完成后 tkinter“无法分配位图”会使 Spyder 内核崩溃?
- apache - htaccess 子文件夹中只有一个文件并保留 url
- python - 如何在 Python 中显示 [0,1] 图像?
- javascript - 如何将数组映射到 HTML 网格?
- gitlab - 如何在 gitlab 的同一个容器中运行多个阶段?