Jak nawigować do katalogu w C: \ z Cygwin?


370

Próbuję zainstalować PyQt4, aby się z tym pogodzić . Instrukcja instalacji powiedziała, że ​​muszę zainstalować Sip . Ostatnim krokiem do instalacji Sip jest użycie make installpolecenia. Windows tego nie ma, więc sprawdziłem i wszystko, co widziałem, mówiło o zainstalowaniu Cygwina. Więc zrobiłem. Ale ... łyk jest w środku C:\Python31\sip.

Czy mogę uruchomić to z polecenia Cygwin? Jeśli tak, jak mam to zrobić?

Czy mogę uruchomić to z normalnego wiersza polecenia systemu Windows? Jeśli tak, jak miałbym to zrobić?

Odpowiedzi:



195

Dodam coś, co bardzo mi pomoże w cygwin. Zawsze, gdy konfiguruję nowy system, zawsze to robię

ln -s /cygdrive/c /c

Stwarza to link symboliczny do /cygdrive/cz nowym pliku o nazwie /c(w katalogu domowym)

Następnie możesz to zrobić w swojej powłoce

cd /c/Foo
cd /c/

Bardzo przydatny.


1
Pamiętaj, że to uniemożliwia nazwanie plików / katalogów cz możliwością normalnego odwoływania się do nich.
Raj

1
Niedawno zainstalowałem MSYS2 i było to domyślne zachowanie, /cygdrivew rzeczywistości nie działa ...
joeeey,


49

Już zaakceptowałeś odpowiedź, ale pomyślałem, że wspomnę, że w Cygwin działa również:

cd "C:\Foo"

Myślę, że cd /cygdrive/cmetoda jest lepsza, ale czasem warto wiedzieć, że możesz to zrobić.



6

Ponieważ prawdopodobnie będziesz chciał to robić często, dodaj aliasy do pliku .bashrc, na przykład:

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

Następnie możesz po prostu wpisać w wierszu polecenia:

cdc

3

Zdefiniuj zmienną w .bashrc:

export C=/cygdrive/c

wtedy możesz użyć

cd $C/

a zakładka automatycznie uzupełnia się poprawnie (proszę dołączyć / na końcu)


2

W powiązanej notatce możesz również polubić:

shopt -s autocd

Pozwala to na zapisanie katalogu w katalogu po prostu przez wpisanie katalogu

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

Aby było trwałe, należy dodać go do swojego ~/.bashrc



1

Utwórz plik o nazwie „overrideBashCdForWindowsPaths” w folderze HOME. Wklej następujące linie do tego pliku i zapisz:

#!/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")"
}

Następnie wpisz następujące polecenie w terminalu, gdy jesteś w folderze HOME:

echo ". overrideBashCdForWindowsPaths" >> .bashrc

Zamknij terminal i otwórz nowy. Możesz teraz łatwo przejść do tego folderu Windows, po prostu wpisując

cd C:\Python31\sip

Skrypt odczytuje ostatnie polecenie, wyodrębnia ścieżkę i przekazuje ją do narzędzia do konwersji ścieżek Cygwin. Nadając nazwę funkcji „cd”, niejako „nadpisujemy” wbudowane „cd” Basha i przekazujemy do niego faktyczne wywołanie w ostatnim wierszu.


Dzięki @KoenigGunther, to działa! Ale trochę powolny, jeśli chodzi o zmianę katalogu. Czy istnieje sposób, aby przyspieszyć, tak jak przy użyciu cytatu? np.cd "C:\Python31\sip"
user11392987

1

Ten, który lubię to: cd C:

Aby mieć Linuksa, to wykonaj:

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

i użyj tego w następujący sposób: ~/folder/..


0

Warto tu wspomnieć, że Cygwin cygpathnadal nie obsługuje poprawnie rozmieszczonych ścieżek Windows, szczególnie w skryptach Bash działających pod Cygwin. Sztuką jest zrozumienie, w jaki sposób Cygwininterpretuje cytaty w skryptach Bash.

Następujące nie działa:

#!/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

Ale to działa:

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

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

O ile mi wiadomo, obecnie nie jest znane obejście tego problemu cygpath, które mogłoby poprawnie obsługiwać spacje w kontekście skryptów bash, ale możesz używać cudzysłowów w swoich skryptach.


0

$cd C:\

> (Naciśnij Enter, gdy zobaczysz ten wiersz)

Jesteś teraz na dysku C.


To >dlatego, że ukośnik na końcu linii uniknął nowej linii ...
Gert van den Berg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.