เนื่องจาก pushd เป็นฟังก์ชัน builtin ใน bash ดังนั้นจึงไม่เกี่ยวข้องกับตัวแปร PATH และยังไม่รองรับ / bin / sh (ซึ่งใช้โดยค่าเริ่มต้นโดย make คุณสามารถเปลี่ยนแปลงได้โดยการตั้งค่า SHELL (แม้ว่าจะไม่ทำงานโดยตรง (test1))
คุณสามารถเรียกใช้คำสั่งทั้งหมดแทนbash -c "..."
ได้ ซึ่งจะทำให้คำสั่งรวมถึง pushd / popd ทำงานในสภาพแวดล้อม bash (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;"
เมื่อเรียกใช้ make 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>
สำหรับ test1 แม้ว่า bash จะถูกใช้เป็นเชลล์ แต่คำสั่ง / บรรทัดแต่ละคำสั่งในกฎจะรันด้วยตัวเองดังนั้นคำสั่ง pushd จึงทำงานในเชลล์ที่แตกต่างจาก popd
pushd
มันไม่ได้บ่นเกี่ยวกับการดวลจุดโทษก็บ่นว่ามันไม่สามารถหา ผลักดันในของคุณ$PATH
หรือไม่?