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

标签 javascript git unix child-process spawn

我需要在子进程中运行 gitbranch 命令,但我只想获取当前 checkout 的分支。该命令在终端中工作:

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

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

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

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

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

git: 'branch | grep * | cut -d ' ' -f2' is not a git command. See 'git --help'.

最佳答案

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没有用。

关于javascript - 尝试在需要管道的子进程中运行 git 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54353597/

相关文章:

Javascript onresize 仅触发一次

javascript - Jasmine 测试未检测到 jQuery 国际化常量

用于表单验证的 JavaScript 似乎没有被调用

git - Ubuntu/DigitalOcean - 无法获取软件包以在全新安装时安装 git

json - 如何使用 jq 从 JSON 中获取键名

javascript - 在孙子组件中通过 Link 管理路由

git - Gitkraken 的多个推送 URL

git clone 失败并显示 "index-pack"失败?

c - 使用标准输入和标准输出管道到相同的 c 程序

bash - 在本地 bash 函数变量中为脚本设置环境变量