2011-10-26 9 views
7

मेरा सेंटोस 5.5 सर्वर दोनों पायथन 2.4 और पायथन 2.7 स्थापित है (/opt/python2.7.2 पर)।मेरी पायथन बैश उपनाम को अनदेखा करता है

 
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 जो मेरे ~/.bash_profile में मैं दो उपनाम मेरी अजगर 2.7 की ओर इशारा करते स्थापित करने और मेरी PATH कॉन्फ़िगर किया गया है निम्नलिखित लाइनों:

 
pythonbuild: 
     python setup.py build 

मेरे आश्चर्य करने के लिए मैंने पाया कि अजगर 2.4 लागू की जा रही है और 2.7 अजगर नहीं।

मैं स्पष्ट रूप से python2.7 निर्दिष्ट करने के लिए है:

 
pythonbuild: 
     python2.7 setup.py build 

बैश उपनाम make द्वारा नजरअंदाज कर दिया जाता है? मुझे अनुमान है कि makePATH का उपयोग करता है ताकि पहले python निष्पादन योग्य (जो कि पायथन 2.4 होता है) का पता लगाने के लिए?

उत्तर

6

से उपयोग करना चाहते हैं के बारे में स्पष्ट हो रहा है आह्वान नहीं है 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). 

आप अपने Makefile में SHELL=/bin/bash -O expand_aliases की तरह कुछ का उपयोग करने में सक्षम हो सकती है, मैं एक स्पष्ट निर्भर रखने लगता है अपने Makefile में नए पायथन पर ency उपयोगकर्ता~/.bash_profile फ़ाइल में छिपी निर्भरता को रखने से बेहतर है।

इसके बजाय, अपने Makefile में PYTHON=/opt/python2.7/bin/python डाल दिया, और फिर आप बस का उपयोग कर सकते हैं:

pythonbuild: 
    $(PYTHON) setup.py build 
अपने नियमों में

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

यदि आप किसी अन्य साइट पर तैनात हैं, तो यह Makefile कि करने की जरूरत है में सिर्फ एक लाइन है:

सबसे अच्छी बात यह आप आसानी से बदल सकते हैं जो अजगर दुभाषिया आप कमांड लाइन पर उपयोग करें अद्यतन किया जा। ग्रेप और awk साथ

1

उपनाम आम तौर पर सिर्फ इंटरैक्टिव गोले द्वारा उपयोग किया जाता

नोट ही नहीं, मुझे लगता है कि make हमेशा खोल आपका सबसे अच्छा शर्त रास्तों आप

1

वर्कअराउंड:

इस समाधान का लाभ यह है कि अगर मैं ~/.bash_profil या ~/.bashrc में उर्फ ​​बदलने के लिए, यह स्वचालित रूप से मेरी makefile द्वारा रूप में अच्छी तरह अपनाया जाता है।

विवरण:

मैं अपने makefile, जो मेरे ~/.bashrc फ़ाइल में तरह परिभाषित किया गया है में उर्फ ​​LCW उपयोग करना चाहते हैं।

.bashrc

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

मैं के रूप में अन्य समाधान में प्रस्तुत भी एक varialble की परिभाषा का उपयोग करें, लेकिन मैं सीधे ग्रेप और awk का उपयोग करके bashrc से अपने मूल्य पढ़ें।

makefile

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

.PHONY: std 
std: 
    $(LCW) 

जैसा कि आप देख LCW उर्फ ​​makefile से आदेश $(LCW) द्वारा कहा जाता है।

नोट:

मेरे समाधान मानता है कि bashrc में उर्फ ​​'अक्षर के भीतर' परिभाषित किया गया है।

+0

सराहना की और इस तकनीक को खोजने में रखेगा। – Kev

संबंधित मुद्दे