Bash 源 + npm 脚本函数未导出但变量是

Bash 源 + npm 脚本函数未导出但变量是

有人可以解释一下在 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/shAlmquist dashshell 无法识别导出函数。在 Mac 上,它很可能bash以兼容模式运行sh- 显然确实如此。

我对 npm 确实一无所知,但应该可以对其进行配置/bin/bash以通过npm config set script-shell- 我不知道这是否可取,或者是否最好找到其他方法来实现所需的功能。

相关内容