Como navegar para um diretório em C: \ com Cygwin?


371

Estou tentando instalar o PyQt4 para que eu possa mexer com ele. O guia de instalação disse que eu tinha que instalar o Sip . A última etapa para instalar o Sip é usar o make installcomando O Windows não possui isso, então procurei e tudo o que vi dizia para instalar o Cygwin. Então eu fiz. Mas ... gole está dentro C:\Python31\sip.

Posso executar isso a partir do comando Cygwin? Se sim, como eu faria isso?

Ou posso executar isso no prompt de comando normal do Windows? Se sim, como eu faria isso?

Respostas:



196

Vou acrescentar algo que me ajuda muito com o cygwin. Sempre que configuro um novo sistema, eu sempre faço isso

ln -s /cygdrive/c /c

Isso cria um link simbólico para /cygdrive/cum novo arquivo chamado /c(no diretório inicial)

Então você pode fazer isso no seu shell

cd /c/Foo
cd /c/

Muito conveniente.


11
Observe que isso impede que você tenha nomes de arquivos / diretórios ccom a capacidade de referenciá-los normalmente.
Raj

11
Eu instalei recentemente MSYS2 e este era o comportamento padrão, com /cygdriveem-fato não está funcionando ...
joeeey


49

Você já aceitou uma resposta, mas pensei em mencionar que o seguinte também funciona em Cygwin:

cd "C:\Foo"

Eu acho que o cd /cygdrive/cmétodo é melhor, mas às vezes é útil saber que você também pode fazer isso.



6

Como você provavelmente desejará fazer isso com frequência, adicione aliases ao seu arquivo .bashrc, como:

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

Então você pode apenas digitar na linha de comando:

cdc

3

Defina uma variável em .bashrc:

export C=/cygdrive/c

então você pode usar

cd $C/

e a guia é preenchida automaticamente corretamente (inclua / no final)


2

Em uma nota relacionada, você também pode gostar de:

shopt -s autocd

Isso permite que você cdize um diretório digitando-o

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

Para tornar persistente, você deve adicioná-lo ao seu ~/.bashrc



1

Crie um arquivo chamado "overrideBashCdForWindowsPaths" na sua pasta HOME. Cole as seguintes linhas nesse arquivo e salve-o:

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

Em seguida, digite o seguinte comando em um terminal enquanto estiver na pasta HOME:

echo ". overrideBashCdForWindowsPaths" >> .bashrc

Feche o seu terminal e abra um novo. Agora você pode facilmente mudar para essa pasta do Windows simplesmente digitando

cd C:\Python31\sip

O script lê o último comando, extrai o caminho e o passa para a ferramenta de conversão de caminhos do Cygwin. Ao nomear a função "cd", meio que "substituímos" o "cd" interno do Bash e delegamos a chamada real na última linha.


Obrigado @KoenigGunther, funciona! Mas um pouco lento para mudar de diretório. Existe uma maneira de torná-lo mais rápido, assim como usar aspas? por exemplocd "C:\Python31\sip"
user11392987 22/01

1

O que eu gosto é: cd C:

Para ter o linux como o sentir, faça:

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

e use isso como: ~/folder/..


0

Algo que vale a pena mencionar aqui é que o Cygwin cygpathainda não lida corretamente com os caminhos espaçados do Windows, especialmente em scripts Bash em execução no Cygwin. O truque é entender como Cygwininterpreta aspas nos scripts do Bash.

O seguinte não funciona:

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

Mas isso funciona:

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

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

Até onde eu sei, atualmente não há nenhuma solução alternativa conhecida cygpathque possa lidar adequadamente com espaços no contexto de script bash, mas você pode usar aspas em seus scripts.


0

$cd C:\

> (Pressione enter quando vir esta linha)

Agora você está na unidade C.


Isso >ocorre porque a barra invertida no final da linha escapou da nova linha ...
Gert van den Berg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.