make игнорирует мой псевдоним python bash - PullRequest
8 голосов
/ 26 октября 2011

На моем сервере CentOS 5.5 установлены Python 2.4 и Python 2.7 (до /opt/python2.7.2). В моем ~/.bash_profile у меня есть два псевдонима, указывающие на мою установку Python 2.7, и мой PATH настроен как:

alias python=/opt/python2.7.2/bin/python
alias python2.7=/opt/python2.7.2/bin/python
PATH=$PATH:/opt/python2.7/bin

Я также создал символическую ссылку:

ln -sf /opt/python2.7.2/bin/python /usr/bin/python2.7

У меня есть Makefile, который имеет следующие строки:

pythonbuild:
        python setup.py build

К моему удивлению, я обнаружил, что вызывается Python 2.4, а не Python 2.7.

Я должен явно указать python2.7:

pythonbuild:
        python2.7 setup.py build

Псевдонимы bash игнорируются make? Я предполагаю, что make использует PATH, чтобы найти первый исполняемый файл python (который является Python 2.4) вместо этого?

Ответы [ 3 ]

8 голосов
/ 26 октября 2011

С bash(1):

   Aliases are not expanded when the shell is not interactive,
   unless the expand_aliases shell option is set using shopt
   (see the description of shopt under SHELL BUILTIN COMMANDS
   below).

Хотя вы можете использовать что-то вроде SHELL=/bin/bash -O expand_aliases в вашем Makefile, я думаю, что сохраняю явную зависимость от более нового Python в вашем Makefile намного лучше, чем скрывать зависимость в вашем пользовательском ~/.bash_profile файле.

Вместо этого, вставьте PYTHON=/opt/python2.7/bin/python в Makefile, и тогда вы можетепросто используйте:

pythonbuild:
    $(PYTHON) setup.py build

в своих правилах.

Самое приятное, что вы можете легко изменить, какой интерпретатор Python вы используете в командной строке:

make PYTHON=/tmp/python-beta/bin/python pythonbuild

ЕслиВы развертываете его на другом сайте, это просто одна строка в Makefile, которую необходимо обновить.

1 голос
/ 17 января 2017

Обходной путь с помощью grep и awk:

Преимущество этого решения заключается в том, что если я изменю псевдоним в ~ / .bash_profil или ~ / .bashrc, он также автоматически будет принят моим make-файлом.

Описание:

Я хочу использовать псевдоним lcw в моем make-файле, который определен как в моем файле ~ / .bashrc.

.bashrc

...
alias lcw='/mnt/disk7/LCW/productiveVersion/lcw.out'
...

Я также использую определение переменной, представленное в других решениях, но я напрямую читаю его значение из bashrc, используя grep и awk.

Makefile

LCW= $(shell grep alias\ lcw= ~/.bashrc | awk -F"'" '{print $$2}')

.PHONY: std
std:
    $(LCW)

Как видите, псевдоним lcw вызывается командой $(LCW) из make-файла.

Примечание:

Мое решение предполагает, что псевдоним в bashrc определен в символах ''.

1 голос
/ 26 октября 2011

псевдонимы обычно просто используются интерактивными оболочками

Обратите внимание только на то, что, я думаю, make не всегда вызывает оболочку. Лучше всего вам явно указывать пути, которые вы хотите использовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...