Cygwin “find” não retorna nada

0

Este comando não retorna nada no Cygwin em execução no Windows Server 2008 r2:

/ usr / bin / find /

Eu tenho uma pequena pausa, mas nenhum texto é retornado. Nenhum erro, nenhum resultado, etc. Eu tentei com caminhos de pesquisa diferentes, usando argumentos (como -type f), e configurei meu caminho cygwin para apenas / usr / local / bin: / usr / bin. Nada funciona.

Idéias?

Obrigado

    
por DByrne 06.03.2014 / 20:19

1 resposta

0

Esse comportamento é muito estranho e eu nunca encontrei nada parecido usando o Cygwin. Eu não tenho pontos de reputação suficientes para pedir informações usando comentários, então vou postar as técnicas de depuração que eu usaria. Espero que sejam úteis para qualquer pessoa que tenha problemas semelhantes.

Primeiramente, eu tentaria verificar se estava executando o executável correto. A execução de find --version deve retornar algo como o seguinte:

find (GNU findutils) 4.5.11

Packaged by Cygwin (4.5.11-1)

Se eu ainda não recebesse nenhum resultado, instalaria e usaria o strace da Cygwin comando:

mkdir testdir
strace -o find.out find testdir
rmdir testdir

strace permite que você veja quais chamadas um executável do Cygwin faz para o Cygwin DLL. Com o comando acima, a saída do comando find é armazenada em find.out .

A menos que você esteja familiarizado com a programação do sistema Windows, grande parte dela não faz sentido No entanto, olhando através da saída ainda lhe dará uma idéia do que o comando está fazendo, por exemplo, o Cygwin PATH e outro ambiente variáveis sendo passadas para o comando são capturadas. Eu normalmente pesquiso por open( para ver quais arquivos o comando (find) está tentando usar. Chamadas bem sucedidas para a função aberta será exibida como:

open: open(/home/anthony/t, 0x30C000)
open: open(., 0x400000)

Chamadas não desejadas para abrir retornam um valor de -1. Note que nem todos os arquivos que encontrar tentativas de abrir são realmente necessárias para o comando funcionar corretamente. Este é um exemplo de uma dessas tentativas malsucedidas (as informações em locale.alias seria lido se existisse, mas não é necessário que o encontrar faça o seu trabalho):

open: -1 = open(/usr/local/share/locale/locale.alias, 0x8000), errno 2

Observação: eu crio (e, em seguida, removo) o diretório testdir vazio, para que não haja uma grande quantidade de informações capturadas no arquivo de saída de strace.

    
por 07.07.2014 / 12:40

Tags