我在 Windows 上运行 64 位 Cygwin。
mintty
当我使用 Cygwin 安装附带的“Cygwin64 终端”桌面快捷方式启动实例时,它运行良好并且所有已安装的命令均能正常工作。
但是,当我mintty.exe
从包含它的位置启动时C:\cygwin64\bin
,出现command not found
错误。
我还设置了一个 AutoHotKey 脚本,按下 NumPad 键时会在桌面目录中启动 mintyy.exe 实例。以mintyy
这种方式启动时,它也会出错command not found
。cd
转到任何其他目录或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
- 目录中
C:\cygwin64\
应该有一个文件Cygwin.bat
(它将bash
在 Windows 的终端即 CMD 中运行),使用它代替mintty
或如果您更喜欢mintty
控制台,那么您需要将其作为\full\path\to\mintty -
(破折号-
是命令的一部分 !!! )启动以正确设置 cygwin 的环境。在您的“AutoHotKey 脚本”中更正此问题以解决您的问题。末尾的
破折号与用作登录 shell相同。如果您在末尾不使用破折号,它将表现为普通的 exe 文件,而无需设置 cygwin 环境,但使用选项它会模拟正常的“登录”系统。-
mintty
bash -l
mintty
-
killall man info wc which ssh clear
再次运行cygwin
安装文件,确保您要查找的程序已安装setup.exe
,然后在搜索字段中键入这些程序,您将在列表中看到它们是否已标记为已安装。检查安装它们,如果未标记为已安装,则继续下一步。- 当您调用时,
ping
您正在运行 Windows 版本的 ping,而不是 cygwin 的,如果您ping
在安装时安装了包cygwin
,您需要使用它所在的完整路径来调用它
C:\cygwin64\bin\ping.exe
(或者如果您在 cygwin 的终端内),否则将执行/bin/ping
Windows 版本。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。