如何从命令行安装cygwin组件?

在Cygwin软件包中是否有类似于Debian上的apt-get或红帽上的yum ,它允许我从命令行安装组件?

“setup.exe”安装程序中没有专门提供apt-getfunction的工具。 然而,Cygwin的命令行包安装程序可以单独下载,但它并不完全稳定,并且依赖于解决方法。

apt-cyg: http : //github.com/transcode-open/apt-cyg

查看项目的问题标签以查看已知的问题。

为了更方便的安装程序,您可能需要使用apt-cyg作为您的软件包pipe理器。 它的语法类似于apt-get ,这是一个加号。 为此,按照上述步骤,然后使用Cygwin Bash进行以下步骤

 wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg chmod +x apt-cyg mv apt-cyg /usr/local/bin 

现在,安装apt-cyg 。 这里有几个安装一些软件包的例子

 apt-cyg install nano apt-cyg install git apt-cyg install ca-certificates 

Cygwin的安装程序接受命令行参数从命令行安装软件包。

例如setup-x86.exe -q -P packagename1,packagename2在没有任何GUI交互的情况下安装软件包(“无人参与安装模式”)。

(请注意,您需要适当地使用setup-x86.exesetup-x86_64.exe 。)

请参阅http://cygwin.com/packages/获取软件包列表。;

有一些脚本,可以用作Cygwin的简单包pipe理器。 但重要的是要知道,它们总是会相当有限 ,因为…呃… Windows。

安装或删除软件包没问题,Cygwin的每个软件包pipe理器都可以这样做。 但更新是一个痛苦,因为Windows不允许覆盖当前正在运行的可执行文件。 所以你不能更新例如Cygwin DLL或任何包含Cygwin本身正在运行的可执行文件的包。 Cygwin安装页面上还有这个注释:

“没有更全function的软件包pipe理器的根本原因是,这样的程序将需要完全访问所有的Cygwin的POSIXfunction。然而,很难在无Cygwin的环境中提供,比如首先存在此外,Windows不会轻易地覆盖正在使用的可执行文件,所以在包pipe理器使用DLL时安装新版本的Cygwin DLL是有问题的。

Cygwin的安装程序使用Windowsregistry来覆盖正在使用的可执行文件,并且此方法需要重新启动Windows 。 因此, 在更新软件包之前closures所有Cygwin进程会更好,所以您不必重新启动计算机即可实际应用更改。 安装一个新的包应该是完全没有任何麻烦。 我不认为除了Cygwin的setup.exe之外的任何软件包pipe理器都会实现任何覆盖正在使用的文件的方法,所以如果它不能覆盖它们,它就会失败。


Cygwin的一些软件包pipe理器:

的apt-CYG

更新 :由于版权问题( 数字千年版权法案删除 ),最近版本库已被禁用。 看起来 ,存储库的所有者在自己的存储库中发布了DMCA删除,并创build了一个名为Sage的新项目(见下文)。

对我来说最好的一个。 只是因为它是最近的一个。 它不使用Cygwin的setup.exe ,而是重新实现setup.exefunction。 它适用于这两个平台 – x86x86_64 。 有很多叉子或多或less的附加function。 例如, kou1okada叉是改进的版本之一 ,这是非常好的。

apt-cyg只是一个shell脚本,没有安装。 只需下载它(或克隆存储库),使其可执行并将其复制到PATH的某处:

 chmod +x apt-cyg # set executable bit mv apt-cyg /usr/local/bin # move somewhere to PATH # ...and use it: apt-cyg install vim 

还有一堆有不同特点的叉子 。


智者

另一个软件包pipe理器实现为一个shell脚本。 我没有尝试,但实际上看起来不错。

它可以search存储库中的软件包,列出类别中的软件包,检查依赖关系,列出软件包文件等等。 它具有其他软件包pipe理员没有的function。


CYG-容易

被遗弃的原始的叉子 CYG-容易 改进和错误修正。 它有相当多的function,并用Python实现。 使用make安装。


巧克力的cyg得到

如果您使用的是Chocolatey,那么您可以安装cyg-get包,这实际上是一个用PowerShell编写的Cygwin's setup.exe的简单包装。


Cygwin的setup.exe

它也有一个命令行模式 。 而且,它允许您一次升级所有已安装的软件包 (就像Debian Linux上的apt-get upgrade一样)。

使用示例:

 setup-x86_64.exe -q --packages=bash,vim 

您可以创build一个别名以便于使用,例如:

alias cyg-get="/cygdrive/d/path/to/cygwin/setup-x86_64.exe -q -P"

那么你可以,例如,安装Vim包:

cyg-get vim

老问题,但仍然相关。 这是今天为我工作的东西(6/26/16)。

从bash shell:

 lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg install apt-cyg /bin 

我想要一个类似于apt-get --print-uris的解决scheme,但不幸的是apt-cyg没有这样做。 以下是一个解决scheme,允许我只下载我需要的软件包及其依赖项,并将它们复制到目标进行安装。 下面是一个bash脚本,它将apt-cyg的输出分析成一个URI列表:

 #!/usr/bin/bash package=$1 depends=$( \ apt-cyg depends $package \ | perl -ne 'while ($x = /> ([^>\s]+)/g) { print "$1\n"; }' \ | sort \ | uniq) depends=$(echo -e "$depends\n$package") for curpkg in $depends; do if ! grep -q "^$curpkg " /etc/setup/installed.db; then apt-cyg show $curpkg \ | perl -ne ' if ($x = /install: ([^\s]+)/) { print "$1\n"; } if (/\[prev\]/) { exit; }' fi done 

以上将打印出需要下载的包的path,相对于cygwin镜像根,省略了已经安装的任何包。 要下载它们,我把输出写到一个文件cygwin-packages-list ,然后使用wget:

 mirror=http://cygwin.mirror.constant.com/ uris=$(for line in $(cat cygwin-packages-list); do echo "$mirror$line"; done) wget -x $uris 

然后可以使用安装程序从本地caching目录进行安装。 请注意,为了这个工作,我需要将setup.ini从以前的cygwin包caching复制到下载的文件目录(否则安装程序不知道是什么)。

Dawid Ferenczy的答案相当完整,但是在我尝试了几乎所有的选项之后,我发现了Chocolatey的cyg-get是最好的(至less是我可以工作的唯一一个)。

我想安装wget ,步骤是这样的:

 choco install cyg-get 

然后:

 cyg-get install wget 

通常在安装软件包之前,必须知道它的确切名称:

 # define a string to search export to_srch=perl # get html output of search and pick only the cygwin package names wget -qO- "https://cygwin.com/cgi-bin2/package-grep.cgi?grep=$to_srch&arch=x86_64" | \ perl -l -ne 'm!(.*?)<\/a>\s+\-(.*?)\:(.*?)<\/li>!;print $2' # and install # install multiple packages at once, note the setup-x86_64.exe -q -s http://cygwin.mirror.constant.com -P "<<chosen_package_name>>"