2016-05-18 5 views
2

私はバニヤンのための私の.bashrcにエイリアスを持っている:npmスクリプトからbashエイリアスにパイプする方法はありますか?

$ 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エイリアスを使用するにはどうすればよいですか?

+1

ません。完全なコマンドを書き出すだけです。エイリアスは対話型シェルで入力を節約するためのものです。スクリプトでは、一度入力するだけです。エイリアス展開は、非対話型シェルではデフォルトではオフになっていますが、オンにすることはできますが、エイリアスが他のシェルから継承されないという問題があります。 – chepner

答えて

2

エイリアスの代わりに関数を作成できます。

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

エクスポートすると、子プロセスが利用できるようになります。

+0

私はなぜ機能がここで利用できるのか分かりませんが、別名はありません。 – jcollum

+0

エイリアスは対話型シェルでの入力を省くことになっています。 –

+0

うん。しかし、私はまだエイリアスがないのに、なぜ機能が利用できるのかを知ることはできません。 – jcollum

1

だから私は、全体の応答が

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

を使用することについてまで入力した。しかし、すべては、bashスクリプトでサポートされている場合には、エイリアスがかろうじてあることが判明しました。私が読んだことから、エイリアスは機能のために推奨されなくなりました...

エイリアスの代わりに機能を使用することを納得させるものはthis discussionを参照してください。/bin/bash -cとnpmを実行してテストすることで、動作するエイリアスを1〜2時間試しました。しかし、Diegoで提案されているような関数を使用すると、すぐに問題なく動作しました。

私は頑固な人がグーグルからここに来て、関数を使うのではなくエイリアスを働かせようと決心した場合でも、質問はすでに回答としてマークされています。

しかし、特にnpmスクリプトでこれを使用しようとすると問題が発生しました。エクスポート-fを実行しても、私の関数は認識されません。手動でbash_aliasesファイルを手動でインクルードしなければならず、その場合でもエクスポートの-fオプションに関するエラーが発生しました。

実際にこの作業を取得するためには、私は、関数のエクスポートラインを取らなければならなかったし、手動でbash_aliasesファイルを含めるには...

+0

'bash'の代わりに' sh'を使ってスクリプトを実行していたような、 'export -f'のエラーが発生しました。 https://stackoverflow.com/questions/5725296/difference-between-sh-and-bashも参照してください。 – tripleee

関連する問題