我正在尝试从 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/