在 CentOS 6.9 机器上工作,我对 bash 脚本有点生疏了。在详细介绍我想要做的事情之前,这是迄今为止我的代码供参考:
#!/bin/bash
package_name="<>"
yum list all > all_packages.txt
len=`expr length "$package_name"`
string=$((len-1))
while IFS= read -r line || "$line"; do
if [[${line:0:$string = $package_name}]]
then <>
我的最终目标是让用户定义要卸载的包,将当前安装的包保存到文本文件,比较该文件中的行以查看哪些行对应于指定的包,将其保存为新的文本文件,然后让“yum remove”命令循环访问该文本文件以删除整个包。
我目前的做法是获取用户想要删除的包,获取相应字符串的长度,然后将每行的前 X 个字符与包本身进行比较 - 如果它们不匹配,我将删除该行并继续下一行。
我现阶段的问题是,我不知道如何删除与指定包不匹配的行。从网上看到的情况来看,可以使用“sed”或“grep”来完成,但我还没有超越这一点。
预先感谢您的所有帮助!我深深地感激!
答案1
当心XY问题。
您想要删除仅作为依赖项安装的软件包,这yum
可以做到。如果 eclipse 将其他软件包作为依赖项安装,但这些软件包的名称中不包含“eclipse”,该怎么办?字符串匹配对此无济于事。
从man yum
,yum autoremove
将删除所有不是由用户手动安装且不再需要的软件包。yum autoremove mypackage
将仅删除给定的包及其不再需要的依赖项。
要在使用时自动删除yum remove
,请将其添加"clean_requirements_on_remove=1"
到您的/etc/yum.conf
.