Цели действий Node-gyp (или gyp), содержащие = и в Linux

Я использую node-gyp в Linux, и мне нужно использовать действия для определения пользовательских шагов сборки (обратите внимание, является ли это проблемой node-gyp или общей проблемой gyp).

В документации предлагается указать команду для шагов сборки как массив строк, которые в какой-то момент должны быть объединены вместе, чтобы сформировать команду:

'action': ['python', 'tools/js2c.py', '<@(_outputs)', 'CORE', '<@(core_library_files)'],

Поскольку это Linux, node-gyp будет генерировать make-файл для каждой цели в файле binding.gyp, и для действий в этом make-файле будет отображаться пользовательская команда.

Проблема, с которой я столкнулся, заключается в том, что команда должна содержать знак =, чтобы установить переменную среды как часть команды, и мне нужно связать команды с &&, например:

export FOO=BAR && do-something-else --option

Если я попытаюсь указать это как шаг действий gyp, я столкнусь с различными проблемами. Я попытался добавить каждое «слово» в команду как отдельный элемент массива.

'action': ['export', 'FOO=BAR', '&&', 'do-something-else', '--option'],

Это не работает, gyp (точнее, оболочка, в которую передается команда) жалуется, что «&&» не является допустимым идентификатором.

Заглянув в сгенерированный make-файл, команда была расширена до этого, что объясняет ошибку оболочки:

export "FOO=BAR" "&&" do-something-else --option

Кавычки были оставлены вокруг присвоения переменной и &&. Непонятно почему. Я пробовал много вариантов, чтобы предотвратить это, но безрезультатно. Все, что содержит = или &, заканчивается кавычками, что в большинстве случаев делает синтаксис команды недействительным.

Предложения приветствуются.


person dtopham75    schedule 22.06.2016    source источник


Ответы (1)


Причина, по которой это происходит, заключается в том, что Gyp считает все после первого слова аргументом команды, заданной в первом слове, поэтому он заключает эти и другие специальные символы в кавычки, чтобы интерпретировать их оболочкой. Я не думаю, что есть какой-либо способ предотвратить это, что, как вы обнаружили, делает создание пользовательской команды с использованием конвейера команд оболочки почти невозможным.

person msc    schedule 12.02.2019
comment
Спасибо за ответ, как-то забыл об этом. Я понял столько, сколько работал вокруг этого. - person dtopham75; 18.02.2019