【shell编程】报错信息:bash: bad file descriptor(包含6种解决方法)
大家好,我是摇光~
在运行 Shell 脚本时,遇到 bash: bad file descriptor 错误通常意味着脚本尝试对一个无效或不可用的文件描述符(file descriptor)执行了读写操作。
以下是一些可能导致这个问题的原因、详细案例以及相应的解决方案:
首先我们来了解一下:文件描述符,这里用一些简单易理解的解释下这个名词。
- 在Linux操作系统中,文件描述符(File Descriptor,简称FD)就像是一个“门牌号”,它用来标识和访问被打开的文件或其他输入/输出资源(比如管道、套接字等)。
- 每个打开的文件或资源都会有一个唯一的文件描述符与之对应。
想象一下,你有很多房间(文件或资源),每个房间都有一个独特的门牌号(文件描述符)。当你想要进入某个房间(访问某个文件或资源)时,你只需要告诉系统你想要去的门牌号(文件描述符),系统就会帮你打开那扇门(访问那个文件或资源)。
我用shell脚本来举个关于文件描述符的例子:
# 打开一个文件用于写入,并将文件描述符3与之关联
exec 3>output.txt# 向文件描述符3(即output.txt文件)写入内容
echo "This is a test message written to file descriptor 3." >&3# 关闭文件描述符3
exec 3>&-
上面的就是文件描述符的一些知识点。
下面我们来看一下出现“bash: bad file descriptor”错误的原因:
1. 重复关闭文件描述符
- 案例:
exec 3>output.txt # 打开文件描述符3用于写入output.txt
exec 3>&- # 关闭文件描述符3
exec 3>&- # 尝试再次关闭已关闭的文件描述符3
- 解决方案:
- 确保每个文件描述符只被关闭一次,上述例子可以删除一个
exec 3>&-
- 可以通过检查脚本中的 exec 命令来避免重复关闭,搜索一下 exec 命令是否存在重复关闭。
2. 使用已关闭的文件描述符
- 案例:
exec 3>output.txt # 打开文件描述符3
exec 3>&- # 关闭文件描述符3
echo "Hello" >&3 # 尝试向已关闭的文件描述符3写入数据
- 解决方案:
- 在文件描述符关闭后,不要尝试对其进行任何操作。
- 所以上面代码
echo "Hello" >&3
应该写在第二行,最后才进行关闭exec 3>&-
3. 文件描述符溢出
- 案例:
虽然 Bash 通常允许打开大量文件描述符(受限于系统配置)
但如果你打开了非常多而没有关闭,可能会耗尽可用的文件描述符。
- 解决方案:
- 使用
ulimit -n
查看当前 shell 会话的文件描述符限制。- 在脚本中适当关闭不再需要的文件描述符。
- 考虑使用文件描述符的循环重用,特别是当处理大量文件时。
4. 错误的文件描述符传递或使用
- 案例:
exec 3>output.txt # 打开文件描述符3
# 错误地将文件描述符3作为参数传递给不期望它的命令
some_command -f 3
- 解决方案:
- some_command 这个命令是有问题的,不能操作文件,所以就是错误的命令。
- 确保将正确的文件描述符传递给需要它的命令。
5. 子 Shell 中的文件描述符问题
- 案例:
(exec 3>output.txt # 在子 shell 中打开文件描述符3
)
echo "Hello" >&3 # 在父 shell 中尝试向子 shell 的文件描述符3写入数据
- 解决方案:
- 在正确的 shell 上下文中管理文件描述符。
- 如果需要在多个 shell 环境中共享文件描述符,考虑使用命名管道(FIFO)或其他进程间通信机制。
6. 使用了不正确的重定向语法
- 案例:
echo "Hello" >3 # 缺少 `&` 来指定文件描述符
- 解决方案:
使用正确的重定向语法。
- 对于文件描述符,确保在数字前加上 & 符号,如 >&3 或 <&3。
有些错误属于一些基础知识,如果想学习一些Linux基础知识可以转自:Linux零基础快速入门(非常详细),全覆盖Linux的基础知识,写得比较全。
以上就是shell脚本运行出现“bash: bad file descriptor”错误的一些原因和解决方法。
希望对你找出bug有用~
相关文章:
【shell编程】报错信息:bash: bad file descriptor(包含6种解决方法)
大家好,我是摇光~ 在运行 Shell 脚本时,遇到 bash: bad file descriptor 错误通常意味着脚本尝试对一个无效或不可用的文件描述符(file descriptor)执行了读写操作。 以下是一些可能导致这个问题的原因、详细案例以及相应的解决…...
vscode 配置c/c++环境 中文乱码
D:\MIscrobingDownload\mingw64\binmingw配置到环境变量中 测试一下,按winr输入cmd打开终端 gcc -v g -v安装插件 一 二 run code 因为run code 插件配置实质上是用它提供的指令进行编译执行,因此无法直接使用断点调试功能,需要对配置进行…...
leetcode 面试经典 150 题:两数之和
链接两数之和题序号1题型数组解题方法1. 哈希表,2. 暴力法难度简单熟练度✅✅✅✅✅ 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输…...
【Unity报错】error Cs0103: The name ‘keyCode‘ does not exist in the current context
报错提示: 解决方法: KeyCode K大写...
家用万兆网络实践:紧凑型家用服务器静音化改造(二)
大家好,这篇文章我们继续分享家里网络设备的万兆升级和静音改造经验,希望对有类似需求的朋友有所帮助。 写在前面 在上一篇《家用网络升级实践:低成本实现局部万兆(一)》中,我们留下了一些待解决的问题。…...
“AI智能实训系统:让学习更高效、更轻松!
大家好,作为一名资深产品经理,今天我来跟大家聊聊一款备受瞩目的产品——AI智能实训系统。在这个人工智能技术飞速发展的时代,AI智能实训系统应运而生,为广大学习者提供了全新的学习体验。那么,这款产品究竟有哪些亮点…...
【Linux 之一 】Linux常用命令汇总
Linux常用命令 ./catcd 命令chmodclearcphistoryhtoplnmkdirmvpwdrmtailunamewcwhoami 我从2021年4月份开始才开始真正意义上接触Linux,最初学习时是一脸蒙圈,啥也不会,啥也不懂,做了很多乱七八糟,没有条理的笔记。不知…...
Git 从入门到精通
一、环境配置 下载地址:https://git-scm.com/downloads/ 二、用户配置 找到git bash git --version 查看当前版本 git config --global user.name szhipeng625 设置用户名 git config --global user.email szhipeng625gmail.com 设置邮箱 git config --global …...
【Uniapp-Vue3】创建自定义页面模板
大多数情况下我们都使用的是默认模板,但是默认模板是Vue2格式的,如果我们想要定义一个Vue3模板的页面就需要自定义。 一、我们先复制下面的模板代码(可根据自身需要进行修改): <template><view class"…...
Ansible之批量管理服务器
文章目录 背景第一步、安装第二步、配置免密登录2.1 生成密钥2.2 分发公钥2.3 测试无密连接 背景 Ansible是Python强大的服务器批量管理 第一步、安装 首先要拉取epel数据源,执行以下命令 yum -y install epel-release安装完毕如下所示。 使用 yum 命令安装 an…...
android compose 串口通信
1.添加依赖 implementation("io.github.xmaihh:serialport:2.1.1") 2.添加SerialHelper派生类 class SerialPortHelper(portName:String,baudRate:Int): SerialHelper(portName,baudRate) {var receivedDataBuffer mutableListOf<Byte>()override fun onDa…...
ios脚本巨魔商店多巴胺越狱基本操作教程
准备工作 确认设备兼容性:A9-A11(iPhone6s-X):iOS15.0-16.6.1;A12-A14(iPhoneXR-12PM):iOS15.0-16.5.1;A15-A16(iPhone13-…...
NLP项目实战——基于Bert模型的多情感评论分类(附数据集和源码)
在当今数字化的时代,分析用户评论中的情感倾向对于了解产品、服务的口碑等方面有着重要意义。而基于强大的预训练语言模型如 Bert 来进行评论情感分析,能够取得较好的效果。 在本次项目中,我们将展示如何利用 Python 语言结合transformers库&…...
.NET framework、Core和Standard都是什么?
对于这些概念一直没有深入去理解,以至于经过.net这几年的发展进化,概念越来越多,越来越梳理不容易理解了。内心深处存在思想上的懒惰,以为自己专注于Unity开发就好,这些并不属于核心范畴,所以对这些概念总是…...
Mybatis原理简介
看到Mybatis的框架图,可以清晰的看到Mybatis的整体核心对象,我更喜欢用自己的图来表达Mybatis的整个的执行流程。如下图所示: 原理详解: MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根…...
腾讯云AI代码助手-公司职位分析AI助手
作品简介 腾讯云AI代码助手是一款智能工具,专注于为公司提供职位分析服务。通过自然语言处理和机器学习技术,它能快速解析职位描述,提取关键信息,并提供数据驱动的洞察,帮助公司优化招聘流程和职位设计。 技术架构 …...
腾讯云AI代码助手编程挑战赛-解忧助手
作品简介 何以解忧,唯有杜康。而随着Ai的发展,解忧不再只有杜康还有Ai,使用的是腾讯云AI代码助手来生成的所有代码,使用方便,快捷,高效。 技术架构 采用了全后端分离的架构,前端使用Vue.js,腾讯云的AI服务处理自然语…...
Sentinel服务保护 + Seata分布式事务
服务保护 【雪崩问题】微服务调用链路中某个服务,引起整个链路中所有微服务都不可用。 【原因】: 微服务相互调用,服务提供者出现故障。服务调用这没有做好异常处理,导致自身故障。调用链中所有服务级联失败,导致整个…...
【Leetcode·中等·数组】59. 螺旋矩阵 II(spiral matrix ii)
题目描述 英文版描述 Given a positive integer n, generate an n x n matrix filled with elements from 1 to n(2) in spiral order. Example 1: Input: n 3 Output: [[1,2,3],[8,9,4],[7,6,5]] 提示: 1 < n < 20 英文版地址 https://leetcode.com…...
WebSocket 扩展生态:协议与框架
在前七篇文章中,我们深入探讨了 WebSocket 的基础原理、开发实践和实战案例。今天,让我们把视野扩展到 WebSocket 的生态系统,看看有哪些扩展协议和框架可以帮助我们更好地开发 WebSocket 应用。我曾在一个大型即时通讯项目中,通过合理使用这些工具,将开发效率提升了 50%。 扩…...
MySQL —— 在CentOS9下安装MySQL
MySQL —— 在CentOS9下安装MySQL 1.查看自己操作系统的版本2.找到对应的安装源3.上传我们在windows下,下载的文件,解压4.执行rpm命令,启用MySQL8仓库5.执行dnf install -y mysql-community-server6.设置开机自启动7.获得初始密码8.登录MySQL…...
用VS C#构建Windows服务【纯操作版,附带项目地址】
1.点击“创建新项目”,选择“Windows 服务(.NET Framework)” 2、给项目命名 3、双击“Service1.cs”,右键,选择“添加安装程序”,就会生成一个“ProjectInstaller.cs”文件 4、双击“ProjectInstaller.cs”文件,右键“serviceProcessInstaller1”,选择“属性…...
1.UGUI相关
1.这一种UIcanvas下的组件,会显示在3d物体之前 2.可以设置3d物体在UI界面之前。选中第二个模式。这时候会指定一个摄像机。一般情况下,不用主摄像机。需要新建一个专门给UI的摄像机。相当于设置距离摄像机的远近。两个layer 可以理解成 章节,关卡。相同…...
大语言模型训练的数据集从哪里来?
继续上篇文章的内容说说大语言模型预训练的数据集从哪里来以及为什么互联网上的数据已经被耗尽这个说法并不专业,再谈谈大语言模型预训练数据集的优化思路。 1. GPT2使用的数据集是WebText,该数据集大概40GB,由OpenAI创建,主要内…...
Android 来电白名单 只允许联系人呼入电话
客户需求只允许通讯录中联系人可以呼入电话。参考自带的黑名单实现 CallsManager.java类中的onSuccessfulIncomingCall方法有一些过滤器,可以仿照黑名单的方式添加自己的过滤器。 packages/services/Telecomm/src/com/android/server/telecom/CallsManager.java …...
StarRocks Awards 2024 年度贡献人物
在过去一年,StarRocks 在 Lakehouse 与 AI 等关键领域取得了显著进步,其卓越的产品功能极大地简化和提升了数据分析的效率,使得"One Data,All Analytics" 的愿景变得更加触手可及。 虽然实现这一目标的道路充满挑战且漫…...
plane开源的自托管项目
Plane 是一个开源的自托管项目规划解决方案,专注于问题管理、里程碑跟踪以及产品路线图的设计。作为一款开源软件,Plane 的代码托管在 GitHub 平台上,允许任何人查看和贡献代码。它为用户提供了便捷的项目创建与管理手段,并配备了…...
WebLogic安全基线
WebLogic安全基线 一、 用户权限1 、检查weblogic 的启动用户2 、用户权限整改3 、使用普通用户重启weblogic 二、账户共用1 、检查weblogic 控制台的账户2 、账户共用整改3 、测试登录weblogic 控制台新账户 三、 账户清理1 、检查weblogic 控制台的账户2 、帐户清理整改 四、…...
复杂园区网基本分支的构建
目录 1、各主机进行网络配置。2、交换机配置。3、配置路由交换,进行测试。4、配置路由器接口和静态路由,进行测试。5、最后测试任意两台主机通信情况 模拟环境链接 拓扑结构 说明: VLAN标签在上面的一定是GigabitEthernet接口的,…...
设计模式-结构型-组合模式
1. 什么是组合模式? 组合模式(Composite Pattern) 是一种结构型设计模式,它允许将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。换句话说,组合模式允…...
32单片机从入门到精通之用户界面——用户界面(十四)
不论你现在处于什么样的困境和挑战,不要放弃希望和努力。成功之路不会一帆风顺,但是只要你坚定信念,勇敢面对困难,努力奋斗,就一定能够战胜困难,迈向成功的道路。困难和挫折只是暂时的,而坚持和…...
Redis 优化秒杀(异步秒杀)
目录 为什么需要异步秒杀 异步优化的核心逻辑是什么? 阻塞队列的特点是什么? Lua脚本在这里的作用是什么? 异步调用创建订单的具体逻辑是什么? 为什么要用代理对象proxy调用createVoucherOrder方法? 对于代码的详细…...
NFS 组件容器化部署实战指南
文章目录 前言部署NFS服务器K8S部署NFS问题记录 前言 使用nfs-client-provisioner这个应用,利用nfs server给kubernets提供作为持久化后端,并且动态提供pv。所有节点需要安装nfs-utils组件,并且nfs服务器与kubernets worker节点都能网络连通…...
LCE(Local Cascade Ensemble)预测模型和LSTM(Long Short-Term Memory)模型在效果和特点上存在显著差异
LCE(Local Cascade Ensemble)预测模型和LSTM(Long Short-Term Memory)模型在效果和特点上存在显著差异。以下是对两者的比较: 一、效果比较 LCE模型: 优势:LCE结合了随机森林和XGBoost的优势&a…...
rk3568平台Buildroot编译实践:内核rootfs定制 及常见编译问题
目录 编译前准备常规编译流程定制内核修改内核 参数并增量 保存修改rootfs并增量 保存修改rootfs包下载源rootfs软件包增删refBuildroot 是一个用于自动化构建嵌入式 Linux 系统的工具。它通过使用简单的配置文件和 Makefile,能够从源代码开始交叉编译出一个完整的、可以运行在…...
头歌python实验:网络安全应用实践-恶意流量检测
第1关:re 库的使用 本关任务:编写一个能正则匹配出 ip 地址的小程序。 re 的主要功能函数 常用的功能函数包括: compile、search、match、split、findall(finditer)、sub(subn)。 re.search 函数 re.search 扫描整个字符串并返回第一个成功的匹配。 函数语法: re…...
Linux内核编程(二十一)USB应用及驱动开发
一、基础知识 1. USB接口是什么? USB接口(Universal Serial Bus)是一种通用串行总线,广泛使用的接口标准,主要用于连接计算机与外围设备(如键盘、鼠标、打印机、存储设备等)之间的数据传输和电…...
机器学习实战——决策树:从原理到应用的深度解析
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 决策树(Decision Tree)是一种简单而直观的分类与回归模型,在机器学习中广泛应用。它的…...
计算机网络的定义与发展历程
计算机网络的定义 计算机网络是指通过通信设备和传输介质将分布在不同地点的计算机及其相关设备(如打印机、服务器等)连接起来,按照一定的通信协议进行数据交换与资源共享的系统。计算机网络的基本功能包括:信息的传输、资源共享…...
什么是Kafka?有什么主要用途?
大家好,我是锋哥。今天分享关于【什么是Kafka?有什么主要用途?】面试题。希望对大家有帮助; 什么是Kafka?有什么主要用途? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka 是一个分布式流…...
Ubuntu 24.04 LTS系统安装Docker踩的坑
一开始我跟着Docker给出的官网文档 Ubuntu | Docker Docs 流程走,倒腾了两个多小时,遇到了各种坑,最后放弃了。在我们使用脚本安装Docker命令前,我们先把已经安装的Docker全部卸载掉。 卸载Docker 1.删除docker及安装时自动安装…...
算法基础 - 冒泡排序
文章目录 1、原理演示2、示例一 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。重复进行直到没有再需要交换的元素,这意味着数列已经排序完成。 冒泡排序法采用…...
为答疑机器人扩展问题分类与路由功能
1.意图识别 2. 构建路由模块 简单的意图识别 from chatbot import llmfrom config.load_key import load_key load_key()prompt 【角色背景】 你是一个问题分类路由器,需要识别问题的类型。 --- 【任务要求】 问题的类型目前有:公司内部文档查询、内…...
如何解决 /proc/sys/net/bridge/bridge-nf-call-iptables 文件缺失的问题
在使用 Linux 系统,尤其是在容器化环境(如 Docker、Kubernetes)中时,我们可能会遇到如下错误信息: [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptabl…...
道品科技智慧农业与云平台:未来农业的变革之路
随着全球人口的不断增长,农业面临着前所未有的挑战。如何在有限的土地和资源上提高农业生产效率,成为了各国政府和农业从业者亟待解决的问题。智慧农业的兴起,结合云平台的应用,为农业的可持续发展提供了新的解决方案。 ## 一、智…...
芯片详细讲解,从而区分CPU、MPU、DSP、GPU、FPGA、MCU、SOC、ECU
目录 芯片的概念结构 芯片的派系划分 通用芯片(CPU,MPU,GPU,DSP) 定制芯片(FPGA,ASIC) 芯片之上的集成(MCU,SOC,ECU) 软硬件的匹…...
2025年01月09日Github流行趋势
1. 项目名称:khoj 项目地址url:https://github.com/khoj-ai/khoj项目语言:Python历史star数:22750今日star数:1272项目维护者:debanjum, sabaimran, MythicalCow, aam-at, eltociear项目简介:你…...
OpenCV计算机视觉 06 图像轮廓检测(轮廓的查找、绘制、特征、近似及轮廓的最小外接圆外接矩形)
目录 图像轮廓检测 轮廓的查找 轮廓的绘制 轮廓的特征 面积 周长 根据面积显示特定轮廓 轮廓的近似 给定轮廓的最小外接圆、外接矩形 外接圆 外接矩形 图像轮廓检测 轮廓的查找 API函数 image, contours, hierarchy cv2.findContours(img, mode, method) 代入参…...
安装完docker后,如何拉取ubuntu镜像并创建容器?
1. 先docker拉取ubuntu镜像 docker search ubuntu #搜索ubuntu 镜像 docker pull ubuntu:22.04 #拉取ubuntu 镜像 docker images #下载完成后,查看已经下载的镜像 docker run --name ubuntu_container -dit ubuntu:22.04 /bin/bash # docker container -l 2.…...
C++中的表达式
文章目录 算数操作符位操作符bitset对象或整型值的使用将位移操作符用作IO 赋值操作符赋值操作符的右结合性赋值操作具有低优先级 自增和自减操作符条件操作符sizeof操作符优先级new和delete表达式类型转换何时发生隐式转换显示转换旧式强制类型转换 C中的表达式由一个或多个操…...