Кто-нибудь может объяснить разницу в выводе при запуске следующего на 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
Как вы можете понять из сообщения об ошибке, npm-run
по умолчанию использует /bin/sh
, как обсуждалось здесь.
В Ubuntu /bin/sh
- это оболочка Almquist dash
, которая не распознает экспортированные функции. На Mac это, вероятно, bash
, работающий в режиме совместимости sh
- который, очевидно, распознает.
Я ничего не знаю о npm, однако должно быть возможно настроить его на использование /bin/bash
через npm config set script-shell
- я не знаю достаточно, чтобы понять, целесообразно ли это, или вам лучше найти другой способ реализовать желаемую функциональность.