如何从npm脚本管道到bash别名?

时间:2016-05-18 19:48:42

标签: json node.js bash

我的.bashrc中有别名为bunyan:

$ alias bsh
alias bsh='bunyan -o short'

这行在bash中运行良好:

$ coffee src/index.coffee | bsh

但如果我在'脚本'中加入相同的东西

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "coffee":"coffee src/index.coffee | bsh"
  },

npm run coffee,它失败了:

> coffee src/index.coffee | bsh

sh: bsh: command not found
events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: write EPIPE
  at exports._errnoException (util.js:870:11)
  at WriteWrap.afterWrite (net.js:769:14)

因此我随意尝试使用||代替|并且它有效。我无法弄清楚为什么。据我所知,我不必在JSON中转义管道字符。

但是它实际上并没有将输出传递给bsh别名。

实际修复是使用"coffee":"coffee src/index.coffee | bunyan -o short" - 完全删除别名。

如何在npm脚本中使用bash别名?

2 个答案:

答案 0 :(得分:4)

您可以创建一个函数而不是别名。

function bsh() {
    bunyan -o short
}
export -f bsh

导出将使子进程可用。

答案 1 :(得分:1)

所以我对使用

做了一个完整的回复
. ~/.bash_aliases && coffee src/index.coffee | bsh

但事实证明,在bash脚本中,别名几乎不受支持。根据我的阅读,别名被弃用,而不是函数......

请参阅this discussion,说服我使用函数而不是别名。我尝试了一两个小时来通过使用/ bin / bash -c以及npm run进行测试来获取别名,但没有运气。但是,使用Diego建议的功能可以立即工作并且没有问题。

即使这个问题已被标记为已回答,以防有人像我一样顽固地从谷歌出来并决定尝试使别名工作而不仅仅是使用某个功能。

但是,在尝试使用npm脚本时,我确实遇到了问题。即使使用导出-f,我的功能也无法识别 - 我仍然需要手动包含bash_aliases文件,即使这样,我也会出现关于导出的-f选项的错误。

为了实际使这个工作,我不得不取出函数导出行并手动包含bash_aliases文件......