我怎样才能从npm脚本pipe道到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中转义pipe道字符。

但是,它实际上不会将输出pipe道输送到bsh别名。

实际的解决方法是使用"coffee":"coffee src/index.coffee | bunyan -o short" – 彻底摆脱别名。

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

你可以创build一个函数而不是别名。

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

导出将使其可用于subprocess。

所以我有一个完整的回应打印使用

 . ~/.bash_aliases && coffee src/index.coffee | bsh 

但事实certificate,别名几乎没有,如果有的话,在bash脚本支持。 从我所读到的,别名被弃用,有利于function…

看到这个讨论什么说服我使用function,而不是别名。 我尝试了一两个小时,通过使用/ bin / bash -c以及npm运行来testing别名,没有运气。 然而,使用迭戈build议的function立即工作,没有问题。

即使这个问题已经被标记为回答,以防某些人像我一样固执地从谷歌那里转移,并决定尝试使别名工作,而不是仅仅使用一个函数。

不过,当我尝试在npm脚本中使用这个function时,我遇到了一个问题。 即使使用export -f,我的函数也无法识别 – 我仍然必须手动包含bash_aliases文件,即使如此,我也得到了有关导出的-f选项的错误。

为了实际得到这个工作,我不得不拿出function出口线,并手动包括bash_aliases文件…