“Comando não encontrado” erro ao executar o bash de qualquer lugar, exceto o atalho da área de trabalho Cygwin

1

Estou executando o Cygwin 64-bit no Windows.

Quando eu lanço uma instância de mintty usando o atalho da área de trabalho "Cygwin64 Terminal" que vem com a instalação do Cygwin, ele roda bem e todos os comandos instalados funcionam.

No entanto, quando eu inicio o mintty.exe , de onde ele está em C:\cygwin64\bin , recebo um erro command not found .

Eu também tenho um script AutoHotKey configurado que inicia uma instância do mintyy.exe no diretório Desktop ao pressionar uma tecla do teclado numérico. Quando mintyy é lançado dessa forma, ele também gera um erro command not found . cd ing para qualquer outro diretório, ou fazendo cd por conta própria, não corrige isso também. Tudo o que parece importar é onde a instância da menta foi inicialmente executada.

Alguns dos comandos que exibem erros são:

killall
man
info
wc
which
ssh
clear

A maioria destes está incluída como parte do pacote base do Cywgin e, portanto, é definitivamente instalada como parte da instação do Cygwin, então eu realmente não tenho certeza do que está acontecendo aqui.

Os comandos que funcionam geralmente parecem estar limitados aos listados quando eu faço help no terminal. Aqui está a saída inteira desse comando.

$ help
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
These shell commands are defined internally.  Type 'help' to see this list.
Type 'help name' to find out more about the function 'name'.
Use 'info bash' to find out more about the shell in general.
Use 'man -k' or 'info' to find out more about commands not in this list.

job_spec [&]                            history [-c] [-d offset] [n] or hist>
(( expression ))                        if COMMANDS; then COMMANDS; [ elif C>
. filename [arguments]                  jobs [-lnprs] [jobspec ...] or jobs >
:                                       kill [-s sigspec | -n signum | -sigs>
[ arg... ]                              let arg [arg ...]
[[ expression ]]                        local [option] name[=value] ...
alias [-p] [name[=value] ... ]          logout [n]
bg [job_spec ...]                       mapfile [-d delim] [-n count] [-O or>
bind [-lpsvPSVX] [-m keymap] [-f file>  popd [-n] [+N | -N]
break [n]                               printf [-v var] format [arguments]
builtin [shell-builtin [arg ...]]       pushd [-n] [+N | -N | dir]
caller [expr]                           pwd [-LP]
case WORD in [PATTERN [| PATTERN]...)>  read [-ers] [-a array] [-d delim] [->
cd [-L|[-P [-e]] [-@]] [dir]            readarray [-n count] [-O origin] [-s>
command [-pVv] command [arg ...]        readonly [-aAf] [name[=value] ...] o>
compgen [-abcdefgjksuv] [-o option] [>  return [n]
complete [-abcdefgjksuv] [-pr] [-DE] >  select NAME [in WORDS ... ;] do COMM>
compopt [-o|+o option] [-DE] [name ..>  set [-abefhkmnptuvxBCHP] [-o option->
continue [n]                            shift [n]
coproc [NAME] command [redirections]    shopt [-pqsu] [-o] [optname ...]
declare [-aAfFgilnrtux] [-p] [name[=v>  source filename [arguments]
dirs [-clpv] [+N] [-N]                  suspend [-f]
disown [-h] [-ar] [jobspec ... | pid >  test [expr]
echo [-neE] [arg ...]                   time [-p] pipeline
enable [-a] [-dnps] [-f filename] [na>  times
eval [arg ...]                          trap [-lp] [[arg] signal_spec ...]
exec [-cl] [-a name] [command [argume>  true
exit [n]                                type [-afptP] name [name ...]
export [-fn] [name[=value] ...] or ex>  typeset [-aAfFgilnrtux] [-p] name[=v>
false                                   ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
fc [-e ename] [-lnr] [first] [last] o>  umask [-p] [-S] [mode]
fg [job_spec]                           unalias [-a] name [name ...]
for NAME [in WORDS ... ] ; do COMMAND>  unset [-f] [-v] [-n] [name ...]
for (( exp1; exp2; exp3 )); do COMMAN>  until COMMANDS; do COMMANDS; done
function name { COMMANDS ; } or name >  variables - Names and meanings of so>
getopts optstring name [arg]            wait [-n] [id ...]
hash [-lr] [-p pathname] [-dt] [name >  while COMMANDS; do COMMANDS; done
help [-dms] [pattern ...]               { COMMANDS ; }

No entanto, ainda mais confuso, ping não faz parte dessa lista, mas também funciona.

Alguém tem alguma ideia do que está acontecendo aqui?

    
por Hashim 05.02.2017 / 05:32

2 respostas

3
  1. No diretório C:\cygwin64\ deve haver o arquivo Cygwin.bat (ele executará bash no terminal do Windows, também conhecido como CMD), use-o em vez de mintty ou se preferir mintty console, será necessário iniciá-lo como \full\path\to\mintty - (o traço - faz parte do comando !!!) para configurar corretamente o ambiente do cygwin. Corrija isso em seu "script AutoHotKey" para resolver seu problema.
    O traço caractere - no final de mintty faz o mesmo que bash -l - é usado como shell de login. Se você estiver usando mintty sem traço no final, ele se comportará como um arquivo exe comum sem configurar o ambiente cygwin, mas com a opção - ele emulará um "login" normal para o sistema.
  2. Verifique se os programas que você está procurando
    killall man info wc which ssh clear
    instalado executando cygwin arquivo de instalação setup.exe novamente e digite estes programas no campo de busca, você verá na lista se eles verificaram como instalados ou não. Marque para instalá-los e prossiga se não estiver marcado como instalado.
  3. Quando você chama ping executando a versão do ping do Windows, não do cygwin, se você instalou o pacote ping quando instalou cygwin você precisa chamá-lo com o caminho completo onde localizou C:\cygwin64\bin\ping.exe (ou /bin/ping se você estiver dentro do terminal do cygwin), caso contrário a versão da janela ping será executada.

O Cygwin pode ser usado em dois modos de operação: um, quando você chama o utilitário do cygwin diretamente de qualquer programa do windows ou arquivo bat (use grep nos arquivos bat), segundo modo de operação quando você quiser emular o sistema operacional baseado em unix, para isso você precisa fazer login no sistema de operação virtual aka cygwin, desta forma Mintty - terminal (ou bash -l ) irá configurar corretamente todo o ambiente como é quando você faz o login para um sistema operativo baseado em unix real.

    
por 05.02.2017 / 07:12
1

Para ter o PATH definido corretamente, você precisa informar mintty para executar o shell como shell de login.

possíveis maneiras:

C:\cygwin64\bin\mintty.exe -
C:\cygwin64\bin\mintty.exe /bin/bash -l

Veja man mintty para detalhes.
Sem o - ou o comando bash adequado, o PATH ainda é o do Windows sem os diretórios do Cygwin.

    
por 05.02.2017 / 10:21