簡體   English   中英

如何從npm腳本管道到bash別名?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM