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
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:
- Localize o cygwin
find
e renomeie / copie-o paralfind.exe
(ou qualquer outro nome que não esteja “no PATH do Windows) - Em seu
~/.bashrc
arquivo adicione a linhaalias 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:
- Inicie a configuração, selecione um espelho e vá para a tela de pacotes
- Selecione “Manter” na lista de botões de opção no topo
- Selecione o pacote desejado no grupo relevante
- 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.
/usr/bin/find
em vez defind
/usr/bin
no caminho, acho que o shell usa o primeirofind
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 issofind
. Então, consertar isso da maneira certa é escrever um aliasalias find="/usr/bin/find"
em~/.bashrc
(ou qualquer shell que você ' reutilizando) .