指定 shell Yarn 用于 运行 脚本
Specify which shell Yarn uses for running scripts
我的 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.
Yarn 似乎使用 sh
来执行这些脚本,但我想为此使用 bash
,以便能够使用大括号扩展。
它可以使用 system
函数启动命令,另请参阅 man 3 system
。
查看使用了哪个系统调用:
strace yarn ...
system
使用 fork
+exec
+wait
并且 exec 系列函数使用 shell /bin/sh
要使用bash命令可以改成bash -c 'command ..'
Yarn 尚未提供配置用于 运行 脚本的默认 shell 的方法,请参阅:https://github.com/yarnpkg/yarn/issues/4248
但是,由于 yarn 使用 Node 来生成其进程,您可以通过更改 Node 本身使用的默认值 shell 来解决这个问题。
在 Ubuntu 上,如果您有 root 权限,您可以通过将符号链接 /bin/sh
更改为指向 dash
以外的其他内容来执行此操作:
sudo ln -sf /bin/bash /bin/sh
在Git-bash中Windows,你可以把COMSPEC
环境变量改成C:\Windows\system32\cmd.exe
以外的东西,但是我没有让它为我工作。
另请参阅:
- Force node to use git bash on windows
新配置参数 script-shell
的纱线版本 1.19 added support。您现在可以执行以下操作:
yarn config set script-shell /bin/bash
我的 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.
Yarn 似乎使用 sh
来执行这些脚本,但我想为此使用 bash
,以便能够使用大括号扩展。
它可以使用 system
函数启动命令,另请参阅 man 3 system
。
查看使用了哪个系统调用:
strace yarn ...
system
使用 fork
+exec
+wait
并且 exec 系列函数使用 shell /bin/sh
要使用bash命令可以改成bash -c 'command ..'
Yarn 尚未提供配置用于 运行 脚本的默认 shell 的方法,请参阅:https://github.com/yarnpkg/yarn/issues/4248
但是,由于 yarn 使用 Node 来生成其进程,您可以通过更改 Node 本身使用的默认值 shell 来解决这个问题。
在 Ubuntu 上,如果您有 root 权限,您可以通过将符号链接 /bin/sh
更改为指向 dash
以外的其他内容来执行此操作:
sudo ln -sf /bin/bash /bin/sh
在Git-bash中Windows,你可以把COMSPEC
环境变量改成C:\Windows\system32\cmd.exe
以外的东西,但是我没有让它为我工作。
另请参阅:
- Force node to use git bash on windows
新配置参数 script-shell
的纱线版本 1.19 added support。您现在可以执行以下操作:
yarn config set script-shell /bin/bash