linux shell在while中用read从键盘输入的实现

发布时间 - 2026-01-10 22:19:05    点击率:

系统是ubuntu 14.04 64bit,之前曾想安装Stream来玩dota2,但最终没成功。由于Stream只有32bit,安装Stream时也安装了大量32bit的库。删除Stream后,这些库也一直没管,今天忽然心血来潮,想清理一下系统,把不必要的32bit库都干掉。

dpkg -l | grep "i386"看一下,32bit库太多,一个个敲sudo apt-get purge xxx显然有点累,分析了一下输出,

格式大概如下:

rc libkrb5support0:i386  1.12+dfsg-2ubuntu4  i386 MIT Kerberos runtime libraries - Support library

第2列为包名,第4列是平台,于是决定写一个脚本来删除:

#!/bin/sh

#rc libkrb5support0:i386  1.12+dfsg-2ubuntu4  i386 MIT Kerberos runtime libraries - Support library
#
#
pks=`dpkg -l | grep "i386" | awk '{print $2,$4}'`

tmp="tmp.file"

echo "$pks" > $tmp

while read line
do
  name=`echo $line | awk '{print $1}'`
  platform=`echo $line | awk '{print $2}'`

  # if [ == ] in bash,buf in dash,if [ = ]
  if [ "$platform" = "i386" ];then
    sudo apt-get purge $name
  fi
done < $tmp

rm -rf $tmp

exit 0

这个脚本大体上没有什么错,不过在执行sudo apt-get purge $name这一行时,系统询问是否删除。但是这时却没有机会输入,而是直接中止执行。

xzc@xzc-HP-ProBook-4446s:~$ ./rm_i386_package.sh 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树    
正在读取状态信息... 完成    
下列软件包将被【卸载】:
 libdrm-radeon1:i386*
升级了 0 个软件包,新安装了 0 个软件包,要卸载 1 个软件包,有 306 个软件包未被升级。
解压缩后会消耗掉 0 B 的额外空间。
您希望继续执行吗? [Y/n] 中止执行。

批量删除软件这操作,当然要一个确认,不能加个参数默认执行啊。

查了一下资料,大概是说

while read line
do
# xxx
done < $file

这样会把read指令重定向为文件$file,这时在while中调用read会直接在文件中取一行作为输入。所以在while中要把read重新定向为终端。上面的脚本稍微修改一行:

sudo apt-get purge $name < /dev/tty

这样就OK了。

以上就是小编为大家带来的linux shell在while中用read从键盘输入的实现全部内容了,希望大家多多支持~


# linux  # while  # read  # bash shell获取当前脚本的绝对路径(pwd/readlink)  # SHELL脚本read命令的具体用法  # 一条命令让你明白shell中read命令的常用参数  # Shell脚本read用法实现  # 软件包  # 新安  # 这一  # 太多  # 有机会  # 没有什么  # 要把  # 将被  # 是说  # 会把  # 看一下  # 后会  # 解压缩  # 装了  # 心血来潮  # 却没  # 小编  # 来玩  # 未被  # 大家多多 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Android中AutoCompleteTextView自动提示  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  javascript中对象的定义、使用以及对象和原型链操作小结  Windows Hello人脸识别突然无法使用  香港服务器租用费用高吗?如何避免常见误区?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  如何撰写建站申请书?关键要点有哪些?  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何实现用户注册和登录?(Auth脚手架指南)  如何在腾讯云服务器快速搭建个人网站?  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  Android实现代码画虚线边框背景效果  Internet Explorer官网直接进入 IE浏览器在线体验版网址  如何在Windows服务器上快速搭建网站?  如何在IIS管理器中快速创建并配置网站?  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  JavaScript如何实现类型判断_typeof和instanceof有什么区别  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  如何用搬瓦工VPS快速搭建个人网站?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel如何实现模型的全局作用域?(Global Scope示例)  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  香港服务器选型指南:免备案配置与高效建站方案解析  如何在阿里云虚拟服务器快速搭建网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  如何在IIS7上新建站点并设置安全权限?  大同网页,大同瑞慈医院官网?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  js代码实现下拉菜单【推荐】  Laravel如何使用Gate和Policy进行授权?(权限控制)  html如何与html链接_实现多个HTML页面互相链接【互相】  北京的网站制作公司有哪些,哪个视频网站最好?  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  如何利用DOS批处理实现定时关机操作详解  再谈Python中的字符串与字符编码(推荐)