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

Command line 如何从命令行安装cygwin组件?,command-line,cygwin,Command Line,Cygwin,Cygwin软件包中是否有类似于Debian上的apt get或redhat上的yum的工具,允许我从命令行安装组件?在“setup.exe”安装程序中没有专门提供 apt-get的功能。但是,有一个命令行包安装程序 对于Cygwin来说,它可以单独下载,但它并不完全稳定 依赖于变通办法 apt cyg: 查看项目的“问题”选项卡以查看已知问题。Cygwin的安装程序接受从命令行安装软件包 e、 g.setup-x86.exe-q-p packagename1、packagename2在没有任何

Cygwin软件包中是否有类似于Debian上的
apt get
或redhat上的
yum
的工具,允许我从命令行安装组件?

在“setup.exe”安装程序中没有专门提供 apt-get的功能。但是,有一个命令行包安装程序 对于Cygwin来说,它可以单独下载,但它并不完全稳定 依赖于变通办法

apt cyg:

查看项目的“问题”选项卡以查看已知问题。

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

e、 g.
setup-x86.exe-q-p packagename1、packagename2
在没有任何GUI交互的情况下安装软件包(“无人值守安装模式”)

(请注意,您需要根据需要使用
setup-x86.exe
setup-x86_64.exe


有关软件包列表,请参阅。

有关更方便的安装程序,您可能需要使用
apt cyg
作为您的软件包管理员。其语法类似于
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的简单包管理器。但重要的是要知道,由于……嗯……Windows,它们总是相当有限的

安装或删除软件包很好,Cygwin的每个软件包管理器都可以这样做。但是更新是一件痛苦的事情,因为Windows不允许覆盖当前正在运行的可执行文件。因此,您无法更新Cygwin DLL或任何包含Cygwin自身当前运行的可执行文件的包。页面上还有此注释:

“没有功能更全面的软件包管理器的基本原因是 这样的程序需要完全访问Cygwin的所有POSIX功能。 然而,这在一个没有Cygwin的环境中很难提供,例如 第一次安装时存在。此外,Windows不容易允许 覆盖正在使用的可执行文件,以便安装新版本的Cygwin 当程序包管理器使用DLL时出现问题。“

Cygwin的安装程序使用Windows注册表覆盖正在使用的可执行文件 此方法需要重新启动Windows。因此,最好是关闭 更新软件包之前,所有Cygwin进程都将启动,因此您无需重新启动 您的计算机将实际应用更改。安装新软件包 应该完全没有任何麻烦。我不认为任何包经理 除了Cygwin的
setup.exe
实现了覆盖正在使用的文件的任何方法之外, 因此,如果它不能覆盖它们,那么它就会失败


Cygwin的一些包管理器: 更新:由于版权问题,存储库最近被禁用()。它是存储库的所有者在他自己的存储库上发布了DMCA,并创建了一个名为Sage的新项目(见下文)

最适合我的。只是因为这是最近的一次。它没有使用Cygwin的
setup.exe
,而是重新实现了
setup.exe
的功能。它在x86和x86_64这两种平台上都能正常工作。有很多叉子或多或少都有附加功能。例如,是改进版之一,这真的很棒

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

chmod+x apt cyg#设置可执行位
mv apt cyg/usr/local/bin#移动到路径的某处
#…并使用它:
apt cyg安装vim
也有不同的功能


另一个作为shell脚本实现的包管理器。我没有试过,但实际上看起来不错

它可以在存储库中搜索包,在类别中列出包,检查依赖项,列出包文件,等等。它具有其他包管理器所不具备的功能


放弃原来的叉与改进和错误修复。它有很多特性,并且是用Python实现的。使用
make
进行安装


如果使用Chocolate安装Cygwin,则可以安装cyg get软件包,该软件包实际上是Cygwin在PowerShell中编写的
setup.exe
的简单包装


Cygwin的setup.exe 它也有一个。此外,它允许您一次升级所有已安装的软件包(正如
apt get upgrade
在基于Debian的Linux上所做的那样)

示例用法:

setup-x86_64.exe -q --packages=bash,vim
您可以创建别名以便于使用,例如:

alias cyg get=“/cygdrive/d/path/to/cygwin/setup-x86_64.exe-q-p”

然后,您可以安装Vim软件包,例如:


cyg get vim

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

# 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>>"
#定义要搜索的字符串
导出到_srch=perl
#获取搜索的html输出并仅选择cygwin包名称
wget-qO-https://cygwin.com/cgi-bin2/package-grep.cgi?grep=$to_srch&arch=x86_64英寸\
perl-l-ne'm!(.*?\s+\-(.*?\:(.*?)!;打印$2'
#安装
#一次安装多个软件包,请注意
setup-x86_64.exe-q-shttp://cygwin.mirror.constant.com -P“

我想要一个类似于apt-get--print-uri的解决方案,但不幸的是apt-cyg没有做到这一点。下面是一个解决方案,它允许我只下载所需的软件包及其依赖项,并将它们复制到目标系统进行安装。下面是一个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
上面将打印出需要下载的包相对于cygwin m的路径
mirror=http://cygwin.mirror.constant.com/
uris=$(for line in $(cat cygwin-packages-list); do echo "$mirror$line"; done)
wget -x $uris
lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
choco install cyg-get
cyg-get wget
# move installer to cygwin folder
mv C:/Users/<you>/Downloads/setup-x86_64.exe C:/cygwin64/

# add alias to bash_aliases
echo "alias cygwin='C:/cygwin64/setup-x86_64.exe -q -P'" >> ~/.bash_aliases
source ~/.bash_aliases

# add bash_aliases to bashrc if missing
echo "source ~/.bash_aliases" >> ~/.profile
# install vim
cygwin vim

# see other options
cygwin --help