Estou usando cygwin em minha máquina Windows. Estou tentando fazer um find e ele está dando o formato do parâmetro incorreto. Por que isso?

$ ls bootstrap.jar catalina-tasks.xml catalina.bat catalina.sh commons-daemon-native.tar.gz commons-daemon.jar cpappend.bat digest.bat digest.sh setclasspath.bat setclasspath.sh shutdown.bat shutdown.sh startup.bat startup.sh tomcat-juli.jar tomcat-native.tar.gz tool-wrapper.bat tool-wrapper.sh version.bat version.sh $ find . -name "version.sh" FIND: Parameter format not correct 
  • Devo instalar alguma coisa durante a instalação do cygwin ou estou fazendo algo errado?

Resposta

Sua PATH é ruim. Ele tem diretórios do sistema Windows antes dos diretórios do Cygwin ou talvez não tenha nenhum diretório do Cygwin. Esta mensagem vem do comando do Windows find (que informa seu nome como FIND em maiúsculas é uma dica).

Quando você inicia um shell Cygwin, geralmente precisa definir o PATH. Eu recomendo que você inicie um shell de login (se bem me lembro, é isso que as entradas de menu do sistema Cygwin padrão fazem). Seu Cygwin PATH deve ter /usr/local/bin, /usr/bin e /bin (pelo menos) antes de qualquer diretório não Cygwin.

Comentários

  • Sim, que ' provavelmente é isso. Este erro ocorre porque o find que você usou é o comando find do Windows ' s, não cygwin ' s um.
  • Ou digite /usr/bin/find em vez de find
  • Eu ' tive /usr/bin no caminho, acho que o shell usa o primeiro find encontrado no $ PATH, que é o do sistema. Eu estava prestes a removê-lo (porque eu não ' precisava mesmo) , mas acho que alguns scripts de sistema aleatórios podem esperar exatamente isso find. Então, consertar isso da maneira certa é escrever um alias alias find="/usr/bin/find" em ~/.bashrc (ou qualquer shell que você ' reutilizando) .

Resposta

O find está instalado? O que retorna “que encontrar”? Lembre-se de que o Windows tem um achado de linha de comando integrado que o Cygwin acabaria usando se seu próprio achado fosse mia.

Resposta

A resposta de Gilles está correta, pois a versão do Windows do comando find vem antes da versão do cygwin e, portanto, está sendo chamada.

Colocando o Cygwin à frente no entanto, significa que quaisquer arquivos em lote que usam o comando windows find agora irão realmente chamar o comando cygwin find, que pode não ser o que você deseja.

A maneira mais simbiótica de ambos funcionarem, na minha opinião, é fazer o seguinte:

  1. Localize o cygwin find e renomeie / copie-o para lfind.exe (ou qualquer outro nome que não esteja “no PATH do Windows)
  2. Em seu ~/.bashrc arquivo adicione a linha alias find=lfind

Desta forma, quando você executa find a partir do terminal cygwin, você usará t A versão do cygwin, mas os arquivos em lote usarão a versão do Windows.

Nota: Você ainda precisará do diretório cygwin bin no seu PATH, mas agora pode estar mais longe do diretório do sistema do Windows.

Resposta

Quando você está instalando o Cygwin, ele não instala todos os pacotes possíveis a menos que você peça. Para adicionar um pacote desejado, dê uma olhada na explicação aqui no Superusuário.

Ou apenas execute as seguintes ações:

  1. Inicie a configuração, selecione um espelho e vá para a tela de pacotes
  2. Selecione “Manter” na lista de botões de opção no topo
  3. Selecione o pacote desejado no grupo relevante
  4. Selecione “Continuar”

Resposta

Aqui estão os GNU-utils como portas win32 nativas . Eles não precisam do cygwin para ser executado e vêm com um shell (sh.exe), incluindo grep, sed, awk, find, less, cat, tac e muito mais.

O problema com o caminho do Windows persistirá, mas talvez você renomeie o find para gfind (gnu-find) ou para search, para torná-lo mais fácil acessível e adicione o diretório coreutils ao seu PATH.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *