首页 > 解决方案 > 尝试在需要管道的子进程中运行 git 命令

问题描述

我需要在子进程中运行 git branch 命令,但我只想获取当前签出的分支。此命令在终端中工作:

git branch | grep \* | cut -d ' ' -f2

我有许多帖子试图做类似的事情,但我对 Unix 命令的理解不足以获得解决方案。

我已经在其他一些事情中尝试过这个:

spawn("git", ["branch | grep \* | cut -d ' ' -f2"], opts)

这就是我。从标准错误中获取:

git:'分支 | grep * | cut -d ' ' -f2' 不是 git 命令。请参阅“git --help”。

标签: javascriptgitunixchild-processspawn

解决方案


Shell 命令有很多语法:a | b | c并不意味着“运行命令a | b | c”,而是“运行命令a,用一堆胶水让它管道输出;运行命令b,用一堆胶水让它读得更早管道输出作为其输入,并管道其输出;并运行命令c,使用一堆胶水使其读取b“管道输出”。

您可以在代码中复制所有这些胶水,但git branch | grep \* | cut -d ' ' -f2首先这样做是错误的。相反,请使用以下两个命令之一:

git symbolic-ref --short HEAD
git rev-parse --abbrev-ref HEAD

这两个命令之间的区别在于,如果没有当前分支,第一个命令会失败(并显示错误消息)。第二个为这种情况打印。这种情况发生在“分离”时,即存储库没有当前分支HEADHEAD

git branch | grep \* | cut ...序列成功,但针对这种分离的 HEAD 情况打印(HEAD(HEAD,并且没有用。


推荐阅读