2016-06-15 1 views
1

私はbashのスクリプトNodeJSスクリプトでカスタムbashエイリアスをロードする方法は?

#!/bin/bash 
shopt -s expand_aliases 
. my_custom_aliases # load aliases 
alias foo # show alias definition 
foo # run alias 

を持っていると私は

$ ./alias.sh 
alias foo='echo barrr' 
barrr 

をしたいが、今、私はnodejsスクリプトで同じことをしたいと思って、それが働いています。

私はShellJSパッケージ

#! /usr/bin/env node 
var shell = require("shelljs"); 
shell.exec('shopt -s expand_aliases', {shell: '/bin/bash'}); 
shell.exec('. my_custom_aliases', {shell: '/bin/bash'}); 
shell.exec('alias foo', {shell: '/bin/bash'}); 
shell.exec('foo', {shell: '/bin/bash'}); 

my_custom_aliasesは明らかに同じディレクトリにある)

でこのような何かをしようとしましたが、それは私だけでこの

$ node am.js 
/bin/bash: line 0: alias: foo: not found 
/bin/bash: foo: command not found 

を投げていますだから私の質問は:どのようにファイルからカスタムエイリアスをロードし、ノードスクリプト内からそれらを使用できるようにすることができますか?

+0

理論的には、bashスクリプトを読み込んで読み込み、nodeJSで実行できませんでしたか? –

+3

私はすべての 'shell.exec()'が新しいシェルで動くことを期待しています。 – robertklep

答えて

3

私は、あなたが本当にエイリアスよりも優れているかもしれないということを確信していませんが、問題はあなたが4つの別々のシェルを実行していて、それぞれが終了して何かを失うことですあなたが作成した状態。単一のシェルを実行するには

以下のコメントで概説したように、あなたは、

shell.exec('shopt -s expand_aliases \n . my_custom_aliases \n alias foo; foo', 
    {shell: '/bin/bash'}); 

ような何かをしたい別名を持つ行が最初に解析されたときにexpand_aliasesニーズをアクティブにするためには、改行を必要とするのではなくセミコロンは、最初と2番目の文の区切り文字として使用します。

+0

'エイリアスfoo'は動作していますが、' foo'を実行していません。 /bin/bash:foo:コマンドが見つかりません – sobi3ch

+0

別のコマンドでこれを実行する機会はありますか?私はこのスクリプトを拡張しないで、この1つのエイリアスだけを使用します。私はこれをlooooooongの行で実行する必要はありませんbashのような機能を持つことは素晴らしいでしょう。 – sobi3ch

+0

スクリプトファイルにコマンドを持たせることは、とにかく意味をなさないようです。エイリアスは、インタラクティブな使用の便宜のためのものです。 – tripleee

関連する問題