为什么某些Cygwin文件无法执行?

时间:2019-02-24 22:51:57

标签: java windows cygwin

我正在尝试通过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由于与64位版本的Windows不兼容而无法启动或运行。我已经安装了cygwin的64位版本(setup-x86_64)。为什么cygwin的bin都不全是可执行文件?

2 个答案:

答案 0 :(得分:2)

大多数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脚本

答案 1 :(得分:1)

没有人说过这个,所以对于其他任何人来说……如果您需要从3窗口运行“ z ...”命令,并且您有cmd bin目录中,您可以使用bash运行它们(是的,有点麻烦),如

cygwin

或者您可以直接从bash zcat file.gz终端运行它们。

FWIW我必须找到“更多”实用程序并加载它们。由于某些原因,它们不在我最初下载的一组软件包中