如何在Bash脚本中为来自apt-get的人使用zypper?


12

我对在bash脚本中从apt-get转换到zypper有一些疑问。

这等效于什么?

sudo apt-get install curl --assume-yes

(其中curl可以是任何包装)

我找到了Zypper备忘单-openSUSE。非常好!但是我会很感激这里的经验之谈-在脚本中使用zypper的正确方法是什么,我要自动同意所有提示而不跳过需要响应的内容?

由于我的经验不足,我很想使用:

sudo zypper --non-interactive --no-gpg-checks --quiet install --auto-agree-with-licenses curl

但这真的等于--assume-yes吗?

那等价的呢?

sudo apt-get autoremove -y
sudo apt-get autoclean -y

表明没有人...

gdebi-core是否有替代品?还是zypper的“功能强大的可满足性求解器”永远不需要gdebi?我在需要在较旧版本上安装软件包并且已经有一个.deb文件的情况下使用gdebi(但不是所有依赖项)。

Answers:


10

通常,当非交互式运行zypper时,应--non-interactive在快捷方式中使用mode -n

zypper -n install curl

对于来自的人来说,这似乎令人困惑apt-get install -y curl。一些zypper的子命令还支持命令特有-y/ --no-confirm选项为的别名-n/ --non-interactive,但不是所有的子命令执行。由于该install命令确实实现了这一点,因此该命令与上面的命令等效:

zypper install -y curl

请注意,-y必须在之后 install,而全局-n选项子命令之前zypper install -n含义有所不同;请参见手册页)。

[编辑]以下部分不再准确,但保留以供历史参考。当前的zypper支持--gpg-auto-import-keys自动导入和信任与新存储库关联的gpg密钥的选项。


根据文档,没有交互模式就无法接受GPG密钥:

仅在交互模式下可以信任或导入新密钥

即使带有--no-gpgp-checksGPG密钥也将被拒绝。

脚本的解决方法是使用pipe和echo

zypper addrepo http://repo.example.org my_name | echo 'a'

1
认真吗 有一个  -n选项和一个  -y选项,它们的含义相同,但是必须将它们放在命令行的不同位置?是的,这令人困惑。(要明确:我不是在射击即时通讯程序;我是说开发人员应该更多地考虑可用性问题。)
G-Man说'Reinstate Monica''Reinstate Monica''19

@ G-Man-好吧。:) zypper有一个-n选择。该install子命令既有-y选项,这是一个方便的是别名全球-n选项,也有自己-n这是短期的--name。可以按功能安装软件包。因此,zypper install -n blah指定仅解析命名的软件包blah,而不考虑提供的 软件包blah。否则,zypper可以基于RPM中的“提供”部分进行解析(包括版本比较),这可以使依赖关系解析更加容易。zypper install 'python>3.5'例如。
dannysauer

其主要用途zypper install -n是,如果您想安装名称为他人提供的功能的特定软件包。例如,也许有一些vi的实现,并且您只想要一个名为vi的特定程序包,而不会vi因回购中的某些原因而丢失gvim(提供vi)的分辨率。就个人而言,我不喜欢短选项的混乱性质,很少在脚本或其他任何人(例如我)以后需要阅读它们时使用它们。:D
dannysauer

8

您具有--non-interactive选项。从手册页:

Switches  to  non-interactive  mode. 
In this mode zypper doesn't ask user to type answers to various prompts, but uses default answers automatically. 
The  behaviour of this option is somewhat different than that of options like '--yes', since zypper can answer different answers to different questions. 
The answers  also  depend on other options like '--no-gpg-checks'.

apt-get的自动删除没有真正的对应方法。最接近的是该命令的--clean-deps选项,该选项立即remove清除依赖关系(但此后不清除)。


是否可以zypper.conf像其他包裹管理器一样在永久确认中添加这样的选项?

我不知道。我有一段时间没有使用suse了,所以我无法检查它。

与pacman,apt和yum / dnf不同,zypper似乎不可能:-(

3

那是一个样本

zypper --non-interactive --quiet addrepo --refresh -p 90 http://packman.inode.at/suse/openSUSE_Leap_15.0/ 'packman'
zypper --gpg-auto-import-keys refresh
zypper --non-interactive dist-upgrade --allow-vendor-change --from packman
zypper --non-interactive install vlc vlc-codecs

当然,您可以添加更多选项,例如,--auto-agree-with-licenses但请记住,如果在此之前或之后有所不同,install


2

这对我有用(在SLES12SP3上选中):

zypper --non-interactive --quiet ar -C http://myrepo myrepo
zypper --gpg-auto-import-keys ref

注意-C/--no-checkzypper ar

现在您可以安装软件包:

zypper in -y --auto-agree-with-licenses vim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.