java - 为什么有些 Cygwin 文件不可执行?

标签 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,则会弹出错误消息,指出由于与 64 位版本的 Windows 不兼容,zcat 无法启动或运行。我已经安装了 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"))

so 2to3 是一个 python 2.7 脚本

关于java - 为什么有些 Cygwin 文件不可执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54857346/

相关文章:

c++ - 从另一个程序 Linux 或 cygwin 运行外部程序

java - Windows 7配置上带有HBase的Titan

java - 如何在OpenGL中给物体添加纹理?

java - 从需要代码修复的日期添加/删除天数

java - 如何将图片发送到 Discord channel

java - 在 Windows 10 上为 Maven 设置 JAVA_HOME

php - 本地主机花费的时间太长。该怎么办?

java - IntelliJ 和 Eclipse : debug Java application started by Maven exec:exec

windows - Openshift3 中的 "User "系统 "cannot get securitycontextconstraints at the cluster scope"

java - 我如何使用java程序运行cygwin?