从 Cygwin 桌面快捷方式以外的任何地方运行 bash 时出现“未找到命令”错误

从 Cygwin 桌面快捷方式以外的任何地方运行 bash 时出现“未找到命令”错误

我在 Windows 上运行 64 位 Cygwin。

mintty当我使用 Cygwin 安装附带的“Cygwin64 终端”桌面快捷方式启动实例时,它运行良好并且所有已安装的命令均能正常工作。

但是,当我mintty.exe从包含它的位置启动时C:\cygwin64\bin,出现command not found错误。

我还设置了一个 AutoHotKey 脚本,按下 NumPad 键时会在桌面目录中启动 mintyy.exe 实例。以mintyy这种方式启动时,它也会出错command not foundcd转到任何其他目录或cd单独执行此操作也无法解决此问题。似乎唯一重要的是 mintty 实例最初从哪里运行。

显示错误的一些命令是:

killall
man
info
wc
which
ssh
clear

其中大部分是作为基本 Cywgin 包的一部分包含在内,因此肯定是作为 Cygwin 安装的一部分安装的,所以我真的不确定这里发生了什么。

有效的命令一般来说help当我在终端中执行此操作时,似乎仅限于列出的那些。这是该命令的完整输出。

$ 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 ; }

然而,更令人困惑的是,ping虽然不属于此列表,但也可以工作。

有人知道这里发生了什么事吗?

答案1

  1. 目录中C:\cygwin64\应该有一个文件Cygwin.bat(它将bash在 Windows 的终端即 CMD 中运行),使用它代替mintty或如果您更喜欢mintty控制台,那么您需要将其作为\full\path\to\mintty -(破折号-是命令的一部分 !!! )启动以正确设置 cygwin 的环境。在您的“AutoHotKey 脚本”中更正此问题以解决您的问题。末尾的
    破折号与用作登录 shell相同。如果您在末尾不使用破折号,它将表现为普通的 exe 文件,而无需设置 cygwin 环境,但使用选项它会模拟正常的“登录”系统。-minttybash -lmintty-

  2. killall man info wc which ssh clear
    再次运行cygwin安装文件,确保您要查找的程序已安装setup.exe,然后在搜索字段中键入这些程序,您将在列表中看到它们是否已标记为已安装。检查安装它们,如果未标记为已安装,则继续下一步。
  3. 当您调用时,ping您正在运行 Windows 版本的 ping,而不是 cygwin 的,如果您ping在安装时安装了包cygwin ,您需要使用它所在的完整路径来调用它
    C:\cygwin64\bin\ping.exe(或者如果您在 cygwin 的终端内),否则将执行/bin/pingWindows 版本。ping

Cygwin 可以以两种操作模式使用:第一种,当你直接从任何 Windows 程序或 bat 文件调用 cygwin 的实用程序时(grep例如,在你的 bat 文件中使用);第二种操作模式是当你想模拟基于 unix 的操作系统时,要做到这一点你需要登录到虚拟操作系统,又名 cygwin,这样mintty - 终端(或bash -l)将正确设置所有环境,就像你登录到真正的基于 unix 的操作系统一样。

答案2

为了正确设置 PATH,您需要告知mintty以登录 shell 形式运行 shell。

可能的方法:

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

请参阅man mintty详细信息。
如果没有-或正确的 bash 命令,PATH 仍然是没有 Cygwin 目录的 Windows PATH。

相关内容