有人可以解释一下在 Mac 和 Linux 上运行以下命令时输出的区别吗?
测试文件
#!/bin/bash
testFunc(){
echo "test function";
}
export -f testFunc;
export testVar="test variable";
包文件.json
{
"scripts": {
"setup": "echo $testVar && testFunc"
}
}
终端中的命令
source ./test.sh; npm run setup
在运行 bash 的 Mac 终端应用程序上输出
> echo $testVar && testFunc
"test variable"
"test function"
在 Linux WSL ubuntu 上运行 bash 的输出
> echo $testVar && testFunc
"test variable"
sh: 1: testFunc: not found
- - - 编辑
您可以通过设置然后取消设置 npm 默认 shell 来解决这些差异。
npm config set script-shell "/bin/bash"; source ./test.sh; npm run setup; npm config delete script-shell
答案1
从错误消息中可以推断,默认情况下npm-run
使用/bin/sh
,如上所述这里。
在 Ubuntu 中,/bin/sh
Almquist dash
shell 无法识别导出函数。在 Mac 上,它很可能bash
以兼容模式运行sh
- 显然确实如此。
我对 npm 确实一无所知,但应该可以对其进行配置/bin/bash
以通过npm config set script-shell
- 我不知道这是否可取,或者是否最好找到其他方法来实现所需的功能。