2017-05-04 57 views
0

package.json具有這樣它的腳本:指定其外殼採用的紗線運行腳本

"buildTslint": "node_modules/typescript/bin/tsc node_modules/awesomeLibrary_node_tslint/{,helpers/}*.ts",

注意{,helpers/}*.ts的一部分,這就是所謂的Brace Expansion且只能在bash,不sh

當運行yarn buildTslint我得到以下輸出:

# yarn buildTslint 
yarn buildTslint v0.22.0 
$ node_modules/typescript/bin/tsc node_modules/awesomeLibrary_node_tslint/{,helpers/}*.ts 
error TS6053: File 'node_modules/awesomeLibrary_node_tslint/{,helpers/}*.ts' not found. 
error Command failed with exit code 2. 

看來,紗線使用sh執行這些腳本,但我想用bash關於這個問題,可以使用大括號展開。

回答

1

它可以使用system函數啓動命令,也可參見man 3 system

要查看哪個系統呼叫時:

strace yarn ... 

system使用fork + exec + wait和EXEC家庭功能使用殼/bin/sh

到用bash命令可以改爲bash -c 'command ..'

+0

'的bash -c '命令..''按預期工作,非常感謝。但是,有沒有設置默認shell的方法,所以在將來不會發生? –

+1

我認爲不是如果它是通過紗線系統調用完成的,它是特定於實現的,並且由於'man 3 exec'' man 3 system'指定了'/ bin/sh' –

1

紗線尚未提供配置用於運行腳本的默認外殼的方法,請參閱:https://github.com/yarnpkg/yarn/issues/4248

但是,由於yarn使用Node生成其進程,因此可以通過更改Node自身使用的默認shell來解決此問題。

在Ubuntu上,如果你有root權限,你可以通過改變符號鏈接/bin/sh這樣做是爲了指向其他的東西比dash

sudo ln -sf /bin/bash /bin/sh

在Windows的Git-bash中,你可以改變COMSPEC環境變量爲C:\Windows\system32\cmd.exe以外的東西,但我沒有得到那個爲我工作。

參見: