Исходный код Bash + функция сценария npm не экспортируется, но переменная равна

Кто-нибудь может объяснить разницу в выводе при запуске следующего на Mac и Linux.

test.sh

#!/bin/bash

testFunc(){
    echo "test function";
}

export -f testFunc;

export testVar="test variable";

package.json

{
    "scripts": {
        "setup": "echo $testVar && testFunc"
    }
}

Команда в терминале

source ./test.sh; npm run setup

Вывод на Mac Терминальное приложение, работающее с bash

> echo $testVar && testFunc

"test variable"
"test function"

Вывод на linux WSL ubuntu с запущенным bash

> echo $testVar && testFunc

"test variable"
sh: 1: testFunc: not found

----- Изменить

Вы можете обойти различия, установив и отключив оболочку npm по умолчанию.

npm config set script-shell "/bin/bash"; source ./test.sh; npm run setup; npm config delete script-shell
0
задан 29 April 2021 в 13:22

1 ответ

Как вы можете понять из сообщения об ошибке, npm-run по умолчанию использует /bin/sh, как обсуждалось здесь.

В Ubuntu /bin/sh - это оболочка Almquist dash, которая не распознает экспортированные функции. На Mac это, вероятно, bash, работающий в режиме совместимости sh - который, очевидно, распознает.

Я ничего не знаю о npm, однако должно быть возможно настроить его на использование /bin/bash через npm config set script-shell - я не знаю достаточно, чтобы понять, целесообразно ли это, или вам лучше найти другой способ реализовать желаемую функциональность.

1
ответ дан 7 May 2021 в 17:42

Другие вопросы по тегам:

Похожие вопросы: