[英]How can I pipe to a bash alias from an npm script?
我的.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別名?
您可以創建函數而不是別名。
function bsh() {
bunyan -o short
}
export -f bsh
出口將使其可用於兒童流程。
所以我對使用打了一個完整的回復
. ~/.bash_aliases && coffee src/index.coffee | bsh
但事實證明,在bash腳本中,別名幾乎不受支持。 從我所讀到的,別名被棄用以支持函數...
請參閱此討論,以確定我使用函數而不是別名。 我嘗試了一兩個小時來通過使用/ bin / bash -c以及npm run進行測試來獲取別名,但沒有運氣。 但是,使用Diego建議的功能可以立即工作並且沒有問題。
即使這個問題已被標記為已回答,以防有人像我一樣頑固地從谷歌到這里,並決定嘗試使別名工作而不僅僅是使用一個函數,我也包括這個。
但是,在嘗試使用npm腳本時,我確實遇到了一個問題。 即使使用導出-f,我的函數也無法識別 - 我仍然需要手動包含bash_aliases文件,即使這樣,我也會出現關於導出的-f選項的錯誤。
為了實際使這個工作,我不得不取出函數導出行並手動包含bash_aliases文件...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.