如何从命令行安装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.exe
或setup-x86_64.exe
。)
有一些脚本,可以用作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.exe
function。 它适用于这两个平台 – x86和x86_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>>"