Windows & Git Bash: Bash PATH เพื่ออ่านตัวแปรระบบ Windows% PATH%


27

ฉันเพิ่งเพิ่มไดเรกทอรีไปยัง Windows PATH ด้วยตนเองโดยไปที่แผงควบคุม -> ระบบ -> การตั้งค่าระบบขั้นสูง -> ตัวแปรสภาพแวดล้อม -> ตัวแปรผู้ใช้ -> เส้นทาง (Windows 7, 64- บิต)

หลังจากรีบูตเครื่องและเริ่มต้น cmd.exe echo %PATH%แสดงว่าทำงานได้: ฉันเห็นไดเรกทอรีที่ฉันเพิ่งเพิ่มในผลลัพธ์

อย่างไรก็ตามหลังจากเริ่มต้น Git Bash ผลลัพธ์ของการecho $PATHไม่รวมไดเรกทอรีนี้

ฉันสามารถเพิ่มexport PATH=$PATH:/c/my/pathใน bashrc ของฉัน แต่ฉันอยาก Git Bash เพิ่งได้รับ PATH จาก Windows ดังนั้นฉันไม่ต้องจำที่จะเพิ่มเส้นทางไปยังสองแห่ง สิ่งนี้จะสำเร็จได้อย่างไร

(คำถามที่เกี่ยวข้องกับทั่วไปมากขึ้นคืออะไรตั้งค่า $ PATH ของ Git Bash ฉันเห็นรายการซ้ำสองครั้งในที่ต่าง ๆ บางสิ่งที่อยู่ใน Windows% PATH% อยู่ใน $ PATH ของ Git Bash แต่ไม่ใช่คนอื่น ๆ ทุกสิ่งเกิดขึ้นก่อน ฉันได้รับพรอมต์ Git Bash ที่แตะ $ PATH?)


C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\binเส้นทางในคำถามอาจจะมีความสำคัญ:
อาเหม็ดฟาซิห์

คำตอบ:


6

เซสชั่น msysgit git bash ใช้สคริปต์share/WinGit/Git Bash.vbsซึ่งไม่สามารถเข้าถึงหรือแก้ไขตัวแปรสภาพแวดล้อมPATH(เช่นในสคริปต์ vbs ที่ไม่เกี่ยวข้องเช่นนี้ )

เซสชั่น git bash จะเพิ่มไว้ด้านหน้าของคุณในปัจจุบันPATH:

.:/usr/local/bin:/mingw/bin:/bin:

เป็นไปได้ว่าเซสชัน mingw ที่บรรจุด้วย msysgit จะไม่พิจารณาการbinติดตั้ง mingw อื่น: คุณสามารถตรวจสอบได้โดยการตั้งค่าไดเรกทอรีอื่น (ง่ายกว่า) เป็นของคุณPATHและดูว่ายังคงมองเห็นได้ในเซสชัน bash git ของคุณหรือไม่ ถ้าไม่เช่นนั้นจะเป็นปัญหาทั่วไปที่เกี่ยวกับไดเรกทอรีทั้งหมดที่คุณจะเพิ่มใน PATH


1
ดูเหมือนจะไม่ถูกต้อง เมื่อฉันเริ่ม git bash เส้นทางของมันจะถูกตั้งค่าโดยกระบวนการบางอย่างที่แปลงตัวแปร Windows PATH ผ่านบางกระบวนการ ไม่ง่ายเหมือนการเพิ่มรายการพิเศษ: ';' ถูกแปลเป็น ':' ตัวระบุไดรฟ์จะถูกแปลงเป็นชื่อไดเรกทอรีและการแปลงอื่น ๆ ก็เกิดขึ้นเช่นกัน ในบางกรณีการแปลงนี้ผิด - "c:\Program Files\Java\jdk1.8.0_25"\binในเส้นทาง windows ของฉันถูกแปลง/c/Program Files/Java/jdk1.8.0_25"/biเป็นเส้นทางทุบตี git (หมายเหตุหายไปอักขระตัวแรกและตัวสุดท้าย) ... ดังนั้นคำถามคือสิ่งนี้เกิดขึ้นได้อย่างไร?
Jules

@Jules นั่นเป็นไปได้แน่นอน มีการเปลี่ยนแปลงมากมายใน 5 ปี
VonC

5

นี่คือวิธีแก้ปัญหาเล็ก ๆ ของฉันสำหรับปัญหาที่คล้ายกัน (ทุบตี MSYS2 บน Windows 10)

แนวคิดคือการแปลงพา ธ ที่ต้องการเป็นพา ธ สไตล์ Unix และต่อท้ายเพื่อทุบตี $ PATH ทั้งหมดทำใน. bashrc

อย่าผนวกเส้นทางที่จำเป็นเพื่อ Win PATH แทนที่จะสร้าง env var ใหม่ใน Windows เช่น MSYS2_WINPATH และผนวกไดเรกทอรีพา ธ Windows ที่คั่นด้วยเครื่องหมายอัฒภาคทั้งหมดเข้ากับตัวแปรนี้ ผนวก% MSYS2_WINPATH% ไปยัง% PATH%

ตอนนี้ใส่ใน. bashrc ของคุณ -

################################## Construct PATH variable ##################################

winpath=$(echo $MSYS2_WINPATH | tr ";" "\n" | sed -e 's/\\/\\\\/g' | xargs -I {} cygpath -u {})
unixpath=''

# Set delimiter to new line
IFS=$'\n'

for pth in $winpath; do unixpath+=$(echo $pth)":"; done

export PATH=$(echo $PATH:$unixpath | sed -e 's/:$//g')
unset IFS
unset unixpath
unset winpath

################################# Constructed PATH variable #################################

พยายามใน git-bash และทำงานได้โดยไม่ต้องใช้วิธีแก้ปัญหาสำหรับ. bashrc ขอบคุณ!
Michael Haidl

ดีใจที่ได้ยิน :) คุณยินดีต้อนรับ
anubhav

2

หากค่า PATH นั้นยาวเกินไปหลังจากตัวแปร PATH ของผู้ใช้ของคุณถูกต่อกับตัวแปร PATH ในสภาพแวดล้อม Windows จะไม่สามารถเชื่อมต่อตัวแปร PATH ของผู้ใช้ในโหมดไม่โต้ตอบได้

สิ่งนี้สามารถเกิดขึ้นได้อย่างง่ายดายหลังจากติดตั้งซอฟต์แวร์ใหม่และเพิ่มบางอย่างลงใน PATH จึงเป็นการแตกซอฟต์แวร์ที่ติดตั้งอยู่เดิม Windows ล้มเหลว!

การแก้ไขที่ดีที่สุดคือการแก้ไขตัวแปร PATH ในแผงควบคุมและลบรายการที่คุณไม่ต้องการ จากนั้นเปิดหน้าต่าง CMD ใหม่และดูว่ารายการทั้งหมดจะแสดงใน "echo% PATH%"


1

ลองย้ายไดเรกทอรีไปที่จุดเริ่มต้นของตัวแปรเส้นทางของคุณ ฉันมีปัญหาเช่นเดียวกับคุณหลังจากติดตั้ง p4merge ไดเร็กทอรี perforce ถูกเพิ่มเข้ากับพา ธ และพบ p4merge โดย cmd.exe แต่ไม่ใช่ git shell (mingw) หลังจากการค้นหาที่ไร้ผลฉันพยายามแก้ไขตัวแปรเพื่อให้ไดเรคทอรีใช้ข้อมูลปรากฏขึ้นเป็นครั้งแรกในเส้นทางของฉัน ฉันยิงกระสุน git และ, voila, ไดเรกทอรีรวมอยู่ในผลลัพธ์ของ$ echo $path, และ$ p4mergeเปิด p4merge ขึ้นมา

นี่เป็นคำตอบที่อ่อนแอเพราะฉันไม่รู้เหตุผลว่าทำไมมันถึงได้ผล แต่ถ้าการทำงานช่วยคนอื่นได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.