ฉันใช้ MacOSX bash
เป็นเปลือกของฉัน ฉันมีลิงก์สัญลักษณ์สร้างขึ้นเช่นนี้:
ln -s /usr/bin/python python2
ฉันมีแพ็คเกจที่ใช้ python2 และฉันต้องการสร้างลิงก์สัญลักษณ์ในไดเรกทอรีการทำงานปัจจุบันของฉัน/usr/bin/python
ซึ่งเป็น python2 จริง ๆ เมื่อฉันทำpython2
จากบรรทัดคำสั่งฉันได้รับข้อผิดพลาดนี้:
python2: realpath couldn't resolve "/usr/bin/python2"
แต่การเรียกเช่นนี้./python2
จะช่วยแก้ไขเส้นทางได้อย่างถูกต้อง ของฉันPATH
มี.
อยู่ในนั้น ในความเป็นจริงฉันปรับเปลี่ยนมันสำหรับการทดสอบจะมีเฉพาะ.
ในนั้น
ฉันจะแก้ไขปัญหานี้ได้อย่างไร ขอบคุณ!
บริบท
โซลูชันที่แนะนำด้านล่างจำนวนหนึ่งไม่สามารถใช้งานได้สำหรับฉัน ฉันพยายามที่จะกลั่นกรองคำถามของฉันโดยมุ่งเน้นและสั้นที่สุดเท่าที่จะเป็นไปได้เพื่อที่ผู้คนจะไม่จมลงในทะเลของข้อความ แต่ชัดเจนว่าฉันต้องการให้พื้นหลังเพิ่มเติม
ฉันพยายามพัฒนาบนแพ็คเกจที่ฉันลอกแบบมาจากคอมไพล์ แพคเกจเดิมgit-multimail
คือ / ได้รับการพัฒนาบน Linux บางรุ่น (ฉันคาดเดา Ubuntu) ฉันพยายามแก้ไขมันเพื่อให้สามารถใช้งานได้และชุดทดสอบใน MacOSX โดยมีการปรับเปลี่ยนน้อยที่สุด นี่คือสาเหตุที่โซลูชันที่เสนอบางรายการไม่เหมาะ:
ในฐานะที่เป็น root ให้สร้าง
python2
symlink ใน / usr / bin / ฉันกำลังมองหาโซลูชันที่ไม่ต้องการสิ่งนี้ นี่เป็นตัวเลือกที่ชัดเจนในตอนแรก แต่ฉันต้องการโซลูชันที่ปรับเปลี่ยนระบบโฮสต์ให้น้อยที่สุด นี่คือเหตุผลที่ฉันต้องการสร้าง symlink ชั่วคราวในไดเรกทอรีการทำงานปัจจุบันเพิ่ม CWD (เช่น.
) ไปยังเส้นทางของฉันแล้วทำลายสิ่งนี้เมื่อเสร็จสิ้น (เช่น symlink)สร้างสคริปต์ตัวตัดเพื่อเรียกสคริปต์ไพ ธ อนด้วยไพ ธ อนที่มีอยู่ ปัญหานี้คือชุดทดสอบส่วนใหญ่ใช้ script_files จริงเป็นไฟล์เรียกทำงานขึ้นอยู่กับ shebang เพื่อค้นหาสภาพแวดล้อมการเรียกใช้งานที่ถูกต้อง นี่จะหมายถึงการแก้ไขชุดทดสอบอย่างมาก ในบริบทนี้ (ดูตัวอย่างของกรอบการทดสอบด้านล่าง) ฉันจะต้องเพิ่ม wrapper สำหรับทุก
.py
ไฟล์ ผู้ใช้ / นักพัฒนาจะต้องตระหนักถึงกฎต่าง ๆ สำหรับการใช้แพคเกจขึ้นอยู่กับระบบที่พวกเขาอยู่บน (เช่นบน MacOSX ให้แน่ใจว่าคุณไม่ได้ใช้ไฟล์หลามโดยไม่ต้องเรียกพวกเขาผ่านเสื้อคลุมหรือโทรอย่างชัดเจน/usr/bin/python file.py
)#! /bin/sh D=$(cd $(dirname "$0") && pwd) MULTIMAIL="$D/../git-multimail/git_multimail.py" POST_RECEIVE="$D/../git-multimail/post-receive" TESTREPO=$("$D/create-test-repo") HOME="$D" XDG_CONFIG_HOME="$D" GIT_CONFIG_NOSYSTEM=1 export HOME XDG_CONFIG_HOME GIT_CONFIG_NOSYSTEM cd $TESTREPO test_email() { REFNAME="$1" OLDREV="$2" NEWREV="$3" echo "$OLDREV" "$NEWREV" "$REFNAME" | USER=pushuser "$MULTIMAIL" }
เปลี่ยนทุกการอ้างอิงถึง
python2
python
README แนะนำสิ่งนี้ แต่สิ่งนี้ทำให้การควบคุมเวอร์ชันไร้ประโยชน์เนื่องจากระบบมองว่าการเปลี่ยนแปลงนั้นเป็นเวอร์ชั่นใหม่เมื่อจริงแล้วมันไม่ใช่
ฉันใช้ (3) แต่ฉันพยายามหาทางออกที่ดีกว่า ฉันยินดีที่จะยอมรับว่านี่เป็นเพียงสิ่งต่าง ๆ (เช่นไม่มีวิธีที่เหมาะสมในการชี้ 'python2' ให้/usr/bin/python
เป็นแบบพกพาและไม่สร้างความรำคาญโดยไม่ต้องเปลี่ยนชุดทดสอบและกรอบงานจริงมากนัก)
git-multimail.py
มัน#!/usr/bin/env python2
มีวิธีที่ค่อนข้างตรงไปตรงมาในการทำเช่นนี้
ln -s /usr/bin/python2.7 /usr/local/bin/python2
ได้
ln -s /usr/bin/python /usr/bin/python2