Come navigare in una directory in C: \ con Cygwin?


371

Sto cercando di installare PyQt4 in modo da poterlo fare. La guida all'installazione diceva che dovevo installare Sip . L'ultimo passo per installare Sip è usare il make installcomando. Windows non lo ha, quindi l'ho cercato e tutto ciò che ho visto ha detto di installare Cygwin. Così ho fatto. Ma ... sorso è dentro C:\Python31\sip.

Posso eseguirlo dal comando Cygwin? Se è così, come lo farei?

O posso eseguirlo dal normale prompt dei comandi di Windows? Se è così, come potrei farlo?

Risposte:



196

Aggiungerò qualcosa che mi aiuta molto con Cygwin. Ogni volta che installo un nuovo sistema, lo faccio sempre

ln -s /cygdrive/c /c

Questo crea un collegamento simbolico a /cygdrive/cun nuovo file chiamato /c(nella directory home)

Quindi puoi farlo nella tua shell

cd /c/Foo
cd /c/

Molto maneggevole.


1
Si noti che ciò impedisce di avere file / directory nominati ccon la possibilità di fare riferimento a loro normalmente.
Raj,

1
Di recente ho installato MSYS2 e questo era il comportamento predefinito, con /cygdrivein realtà non funzionava ...
joeeey,


49

Hai già accettato una risposta, ma ho pensato di menzionare che anche in Cygwin funziona quanto segue:

cd "C:\Foo"

Penso che il cd /cygdrive/cmetodo sia migliore, ma a volte è utile sapere che puoi farlo anche tu.



6

Come probabilmente vorrai fare spesso, aggiungi alias nel tuo file .bashrc, come:

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

Quindi puoi semplicemente digitare sulla riga di comando:

cdc

3

Definire una variabile in .bashrc:

export C=/cygdrive/c

allora puoi usare

cd $C/

e la scheda si completa automaticamente (includi / alla fine)


2

In una nota correlata, ti potrebbe piacere anche:

shopt -s autocd

Questo ti permette di cd una dir semplicemente digitando la dir

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

Per rendere persistente dovresti aggiungerlo al tuo ~/.bashrc



1

Crea un file chiamato "overrideBashCdForWindowsPaths" nella cartella HOME. Incolla le seguenti righe in quel file e salvalo:

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

Quindi, digitare il seguente comando in un terminale, mentre ci si trova nella cartella HOME:

echo ". overrideBashCdForWindowsPaths" >> .bashrc

Chiudi il tuo terminale e aprine uno nuovo. Ora puoi facilmente passare a quella cartella di Windows semplicemente digitando

cd C:\Python31\sip

Lo script legge l'ultimo comando, estrae il percorso e lo passa allo strumento di conversione del percorso di Cygwin. Chiamando la funzione "cd" ordiniamo di "sovrascrivere" il "cd" incorporato di Bash e deleghiamo la chiamata effettiva all'ultima riga.


Grazie @KoenigGunther, funziona! Ma un po 'lento per cambiare directory. C'è un modo per renderlo più veloce proprio come usare il preventivo? es.cd "C:\Python31\sip"
user11392987,

1

Quello che mi piace è: cd C:

Per avere una sensazione simile a Linux, allora fai:

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

e usalo come: ~/folder/..


0

Qualcosa che vale la pena menzionare qui è che Cygwin's cygpath, ancora non gestisce correttamente i percorsi di Windows spaziati, specialmente negli script Bash eseguiti su Cygwin. Il trucco è capire comeCygwin interpreta le citazioni negli script Bash.

Quanto segue non funziona:

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

Ma questo funziona:

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

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

Per quanto ne so, al momento non esiste alcuna soluzione alternativa nota cygpathche possa gestire correttamente gli spazi nel contesto di scripting bash ma è possibile utilizzare le virgolette negli script.


0

$cd C:\

> (Premi Invio quando vedi questa linea)

Ora sei nell'unità C.


Questo >perché la barra rovesciata alla fine della linea è sfuggita alla newline ...
Gert van den Berg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.