为什么某些 Cygwin 文件不可执行?

Why are some Cygwin files not executable?

我正在尝试从 Java 应用程序在 Windows 上执行 Cygwin 命令。在 cygwin 的 bin 中,我注意到一些文件是应用程序类型 (.exe),而其他文件(如 zcat 和 zless)没有扩展名,只是文件类型。

我已将 bin 添加到 Windows PATH,但似乎只能从 cmd 执行 .exe 文件。下面的代码有效。

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "ls");
Process p = pb.start();

我想使用 zcat 和 zless 之类的东西,但它们不可执行并且 cmd 抱怨 'zcat' 不被识别为内部或外部命令, 可运行的程序或批处理文件。

如果我手动将文件更改为 .exe,我会收到一个弹出错误消息,提示 zcat 无法启动或 运行 由于与 Windows 的 64 位版本不兼容。我已经安装了 64 位版本的 cygwin (setup-x86_64)。为什么 cygwin 的所有 bin 都不是可执行文件?

大多数 cygwin 程序不是二进制程序而是脚本程序。 命令file可以给你一个文件类型的描述:

$ file zcat
zcat: POSIX shell script, ASCII text executable

同时

$ file cat
cat: PE32+ executable (console) x86-64, for MS Windows

读取 zcat 的前 5 行

$ head -n 5 zcat
#!/bin/sh
# Uncompress files to standard output.

# Copyright (C) 2007, 2010-2016 Free Software Foundation, Inc.

我们在第一行看到 #! 表示这是要由 /bin/sh 口译员。

在其他情况下我们可以

$ head -n5 2to3
#!/usr/bin/python2.7.exe
import sys
from lib2to3.main import main

sys.exit(main("lib2to3.fixes"))

所以 2to3 是一个 python 2.7 脚本

没有其他人说过这个,所以对于正在寻找这个的其他人...如果您需要 运行 来自 cmd window 的 "z..." 命令并且你的路径中有 cygwin bin 目录,你可以使用 bash 运行 它们(是的,有点笨拙),如

bash zcat file.gz

等等

或者您可以直接从 cygwin 终端 运行 他们。

FWIW 我必须找到 'more' 实用程序并加载它们。由于某种原因,它们不在我下载的初始软件包中