尝试在需要管道的子进程中运行git命令

时间:2019-01-24 18:56:59

标签: javascript git unix child-process spawn

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

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

我有很多文章试图做类似的事情,但是我对Unix命令的理解还不足以得到解决方案。

我已经尝试了很多其他方法:

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

这就是我。从stderr获取:

  

git:'branch | grep * | cut -d''-f2'不是git命令。见'git   --help'。

1 个答案:

答案 0 :(得分:2)

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

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

git branch | grep \* | cut ...序列成功完成,但在这种分离的HEAD情况下​​打印(HEAD ,而(HEAD没有用。