इसका कारण यह है कि पुश बश में एक अंतर्निहित कार्य है। तो यह PATH चर से संबंधित नहीं है और यह / bin / sh (जो कि डिफ़ॉल्ट रूप से मेक द्वारा उपयोग किया जाता है) द्वारा समर्थित नहीं है। आप इसे बदलकर सेट कर सकते हैं (हालांकि यह सीधे काम नहीं करेगा (test1))।
आप इसके बजाय सभी कमांड चला सकते हैं bash -c "..."
। यह कमांड्स बनायेगा, जिसमें पुश / पोप शामिल हैं, जो बैश वातावरण में चलते हैं (test2)।
SHELL = /bin/bash
test1:
@echo before
@pwd
@pushd /tmp
@echo in /tmp
@pwd
@popd
@echo after
@pwd
test2:
@/bin/bash -c "echo before;\
pwd; \
pushd /tmp; \
echo in /tmp; \
pwd; \
popd; \
echo after; \
pwd;"
जब test1 बना रहे हैं और test2 बनाते हैं तो यह निम्नलिखित देता है:
prompt>make test1
before
/download/2011/03_mar
make: pushd: Command not found
make: *** [test1] Error 127
prompt>make test2
before
/download/2011/03_mar
/tmp /download/2011/03_mar
in /tmp
/tmp
/download/2011/03_mar
after
/download/2011/03_mar
prompt>
टेस्ट 1 के लिए, भले ही बैश को शेल के रूप में उपयोग किया जाता है, नियम में प्रत्येक कमांड / लाइन स्वयं द्वारा संचालित की जाती है, इसलिए पुशड कमांड पॉप से अलग शेल में चलाया जाता है।
pushd
। क्या आपके अंदर धक्का है$PATH
?