Как передать переменную оболочки, возвращаемую из Pythonscript, в другую оболочку для запуска другого Pythonscript в правиле Makefile?

Я пытаюсь в течение нескольких часов и исследую, как передать переменную оболочки, возвращаемую из Pythonscript, в другой сценарий оболочки для запуска другого сценария Python.

У меня есть пример ниже:

MyRule:
export VAR=$(shell python.exe mySkript1.py someInputs); \
echo $$VAR; \
$(shell python.exe mySkript2.py someInputs2 $VAR}) \
echo $$VAR;

Как передать переменную VAR во вторую строку оболочки?

Я попробовал следующее, но ни один из них не сделал этого:

"$VAR"
$$VAR
$(VAR)

.

🤔 А знаете ли вы, что...
Синтаксис Python известен своей простотой и читаемостью.


55
2

Ответы:

Решено

Переменная Makefile $VAR отсутствует, поэтому она заменяется пустой строкой.

В любом случае, не используйте $(shell ...)в рецептах.

MyRule:
    export VAR=$$(python.exe mySkript1.py someInputs); \
    echo $$VAR; \
    python.exe mySkript2.py someInputs2 "$$VAR"; \
    echo "$$VAR"

Вы можете использовать переменные make и сделать:

VAR=$(shell python.exe mySkript1.py someInputs)

MyRule:
      python.exe mySkript2.py someInputs2 "$(VAR)"

В версии GNU-Make, которую я сейчас использую, VAR не расширяется, если это не необходимо, поэтому запуск других рецептов не обязательно приведет к ненужному выполнению python.exe, но я не уверен, что другие версии make будут делать.

Будет ли это хорошей идеей для вашего варианта использования, будет зависеть от того, будет ли это хорошей идеей для вашего варианта использования.