วิธีนำทางไปยังไดเรกทอรีใน C: \ with Cygwin?


371

ฉันพยายามติดตั้งPyQt4เพื่อที่ฉันจะได้ยุ่งกับมัน คู่มือการติดตั้งบอกว่าผมมีการติดตั้งSip ขั้นตอนสุดท้ายในการติดตั้ง Sipคือการใช้make installคำสั่ง Windows ไม่มีสิ่งนั้นดังนั้นฉันจึงค้นหาและทุกสิ่งที่ฉันเห็นว่าติดตั้ง Cygwin ดังนั้นฉันทำ แต่ ... C:\Python31\sipจิบอยู่ใน

ฉันสามารถเรียกใช้สิ่งนี้จากคำสั่ง Cygwin ได้หรือไม่? ถ้าเป็นเช่นนั้นฉันจะทำอย่างไร

หรือฉันจะเรียกใช้จากพรอมต์คำสั่ง windows ปกติได้หรือไม่ ถ้าเป็นเช่นนั้นฉันจะทำยังไง

คำตอบ:



196

ฉันจะเพิ่มบางสิ่งที่ช่วยให้ฉันออกไปด้วย cygwin เมื่อใดก็ตามที่ตั้งค่าระบบใหม่ฉันจะทำสิ่งนี้เสมอ

ln -s /cygdrive/c /c

นี้จะสร้างการเชื่อมโยงสัญลักษณ์ไป/cygdrive/cด้วยไฟล์ใหม่ที่เรียกว่า/c(ในไดเรกทอรีบ้าน)

จากนั้นคุณสามารถทำได้ในเปลือกของคุณ

cd /c/Foo
cd /c/

มีประโยชน์มาก


1
โปรดทราบว่าสิ่งนี้จะป้องกันไม่ให้คุณมีชื่อไฟล์ / ไดเรกทอรีที่cมีความสามารถในการอ้างอิงได้ตามปกติ
ราชา

1
ฉันเพิ่งติดตั้ง MSYS2 และนี่คือพฤติกรรมเริ่มต้นโดยที่/cygdriveจริงแล้วไม่ทำงาน ...
joeeey


49

คุณยอมรับคำตอบแล้ว แต่ฉันแค่คิดว่าฉันพูดถึงว่างานต่อไปนี้ใน Cygwin:

cd "C:\Foo"

ฉันคิดว่าcd /cygdrive/cวิธีนี้ดีกว่า แต่บางครั้งมันก็มีประโยชน์ที่จะรู้ว่าคุณสามารถทำได้เช่นกัน



6

เนื่องจากคุณอาจต้องการทำสิ่งนี้บ่อยครั้งเพิ่มนามแฝงลงในไฟล์. bashrc ของคุณเช่น:

alias cdc='cd /cygdrive/c'
alias cdp='cd /cygdrive/p'

จากนั้นคุณสามารถพิมพ์บนบรรทัดคำสั่ง:

cdc

3

กำหนดตัวแปรใน. bashrc:

export C=/cygdrive/c

จากนั้นคุณสามารถใช้

cd $C/

และแท็บการเติมข้อความอัตโนมัติอย่างถูกต้อง (โปรดระบุ / ในตอนท้าย)


2

ในบันทึกที่เกี่ยวข้องคุณอาจชอบ:

shopt -s autocd

สิ่งนี้ช่วยให้คุณ cd dir โดยเพียงพิมพ์ใน dir

[user@host ~]$ /cygdrive/d
cd /cygdrive/d
[user@host /cygdrive/d]$ 

ในการทำแบบถาวรคุณควรเพิ่มเข้าไปใน ~/.bashrc



1

สร้างไฟล์ชื่อ "overrideBashCdForWindowsPaths" ในโฟลเดอร์ HOME ของคุณ วางบรรทัดต่อไปนี้ลงในไฟล์นั้นและบันทึก:

#!/bin/bash

function cd() {
    CD_PATH="$(history | tail -1 | sed -e "s,.*${FUNCNAME[0]}\s*,,g")"

    if [ -z "${CD_PATH}" -o "${CD_PATH}" = "~" ]; then
        CD_PATH="${HOME}"
    fi

    builtin cd "$(cygpath "$CD_PATH")"
}

ถัดไปพิมพ์คำสั่งต่อไปนี้ในเทอร์มินัลขณะที่คุณอยู่ในโฟลเดอร์ HOME ของคุณ:

echo ". overrideBashCdForWindowsPaths" >> .bashrc

ปิดเทอร์มินัลของคุณแล้วเปิดใหม่ ตอนนี้คุณสามารถเปลี่ยนเป็นโฟลเดอร์ Windows นั้นได้อย่างง่ายดายเพียงแค่พิมพ์

cd C:\Python31\sip

สคริปต์อ่านคำสั่งสุดท้ายแยกเส้นทางและส่งผ่านไปยังเครื่องมือการแปลงเส้นทางของ Cygwin โดยการตั้งชื่อฟังก์ชั่น "cd" เราเรียงลำดับของ 'override' Bash's builtin "cd" และมอบหมายการโทรจริงในบรรทัดสุดท้าย


ขอบคุณ @KoenigGunther มันใช้งานได้! แต่ช้าเล็กน้อยสำหรับการเปลี่ยนไดเรกทอรี มีวิธีทำให้เร็วขึ้นเช่นเดียวกับการใช้คำพูด? เช่นcd "C:\Python31\sip"
user11392987

1

สิ่งที่ฉันชอบคือ: cd C:

หากต้องการให้ linux รู้สึกอย่างนั้นให้ทำ:

ln -s /cygdrive/c/folder ~/folder

และใช้สิ่งนี้เช่น: ~/folder/..


0

สิ่งที่ควรค่าแก่การกล่าวถึงในที่นี้คือ Cygwin's cygpathยังคงไม่จัดการเส้นทาง Windows ที่เว้นระยะอย่างถูกต้องโดยเฉพาะในสคริปต์ Bash ที่ทำงานภายใต้ Cygwin เคล็ดลับคือการเข้าใจว่าCygwinตีความคำพูดในสคริปต์ Bash

ต่อไปนี้ใช้ไม่ได้ :

#!/bin/bash
TBDIR="/cygdrive/c/Program\ Files\ \(x86\)/MyDir/"

if [ -d "${TBDIR}" ]; then 
    echo "Found MyDir directory at: ${TBDIR}"
    cd "$TBDIR"
else 
    echo "MyDir program directory not found!"
    echo "Wrong DIR path: ${TBDIR}"
    exit 1
fi

แต่นี่ใช้งานได้:

#!/bin/bash
# Cygwin-ism: No quotes!
TBDIR=/cygdrive/c/Program\ Files\ \(x86\)/MyDir/

if [ -d "${TBDIR}" ]; then 
...

เท่าที่ฉันรู้ในขณะนี้ยังไม่มีวิธีการแก้ปัญหาที่เป็นที่รู้จักcygpathซึ่งสามารถจัดการช่องว่างในบริบทของสคริปต์สคริปต์ทุบตี แต่คุณสามารถใช้เครื่องหมายคำพูดในสคริปต์ของคุณได้


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