我正在尝试通过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都不全是可执行文件?
答案 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我必须找到“更多”实用程序并加载它们。由于某些原因,它们不在我最初下载的一组软件包中