使用bash / node来检索命令输出

时间:2016-12-06 18:32:55

标签: node.js bash

我正在尝试创建一个构建脚本的一部分,该脚本创建一个包含有关git repo的信息的文件。如何将2+命令的结果作为字符串。

cmd

我知道问题出在<branch>|<date>|<commit-hash>。我只是不知道获得像setVisability()

这样的字符串应该是什么样子

2 个答案:

答案 0 :(得分:0)

问题在于,您传递给echo的论点未被引用。在评估git个子命令后,您执行的命令如下所示:

echo my-branch-name|Mon Dec 5 09:23:00 2016 -0600|d1a9da04125fd67edea6062e99d0be960220d2a4

shell正确地将管道字符解释为管道。换句话说,它认为您希望将echo my-branch-name的输出传递给名为Mon的命令,依此类推。您可以通过在echo

的参数周围添加引号来解决此问题
var cmd = 'echo "$(git rev-parse --abbrev-ref HEAD)|$(git log -1 --format=%cd)|$(git rev-parse HEAD)"';

我在本地尝试了这个,并将以下内容写入文件:

my-branch-name|Mon Dec 5 09:23:00 2016 -0600|d1a9da04125fd67edea6062e99d0be960220d2a4

修改:这不适用于Windows上的bash,显然是因为child_process.exec默认使用cmd.exe。可以使用shell选项将其指向bash,而是将命令更改为以下适用于OP:

var cmd = 'bash -c \'echo "$(git rev-parse --abbrev-ref HEAD)|$(git log -1 --format=%cd)|$(git rev-parse HEAD)"\'';

答案 1 :(得分:-1)

您不需要命令替换。只需将一个命令的输出直接传递给下一个命令。

var cmd = 'git rev-parse --abbrev-ref HEAD | git log -1 --format=%cd | git rev-parse HEAD';