Linux中数据呈现输入输出重定向

news2024/11/29 2:58:56
1 理解输入输出

目前为止,你已经知道了两种脚本输出的方法:

在显示器屏幕上显示输出

将输出重定向到文件中

1.1 标准文件描述符

Linux系统将每个对象当作文件处理。这包括输入和输出进程。Linux用文件描述符(file descriptor)来标识每个文件对象。文件描述符时一个非负整数,可以唯一标识会话中打开的文 件。每个进程一次最多可以有9个文件描述符。处于特殊目的,bash shell 保留了前三个文件 描述符(0,1和2)。

1 STDIN

STDIN 文件描述符代表shell的标准输入,在终端界面来说,标准输入是键盘。在使用 < 符号 时,Linux会用重定向指定的文件来替换标准输入文件描述符,它会读取文件并提取数据,就 像使用键盘输入的一样。

 你可以通过STDIN重定向符号强制cat命令接受来自另一个非标准输入文件的输入

现在cat命令会用ssh_port.sh文件中的行作为输入。

2 STDOUT

STDOUT 文件描述符代表shell的标准输出。在终端界面上,标准输出也就时终端显示器。 shell的所有输出会被定向到标准输出中,也就是显示器。

默认情况下,大部分bash命令会将输出导向STDOUT文件描述符。你也可以通过输出重定向 将命令结果导出到指定文件。

当命令生成错误消息时,shell并未将错误消息通过重定向输出到重定向指定的文件。shell创 建了输出重定向文件,但错误消息却显示在了屏幕上。注意,在显示file文件的时候并没有任 何错误,因为file文件已经创建成功,只是文件内容是空的。

shell对于错误消息的处理是跟普通输出分开的。如果你创建了在后台模式下运行的shell脚 本,通常你必须依赖发送到日志文件的输出消息。用这种方法的话,如果出现了错误信息,这 些信息是不会出现在日志文件中。你需要换种方法来处理。

3 STDERR

shell通过特殊的 STDERR 文件描述符来处理错误消息。STDERR 文件描述符代表shell的标 准错误输出。shell或者shell中运行的程序和脚本出错时生成的错误消息都会发送到这个位 置。

默认情况下,STDERR文件描述符会和STDOUT文件描述符指向同样的地方,尽管分配的描述 符不一样,也就是说,默认情况,错误消息也会显示到显示器输出中。

但从例子也可以看出,STDERR并不会随着STDOUT的重定向而发生改变,使用脚本时,你可 能需要改变这种行为,尤其是当你希望将错误消息保存到日志文件中的时候。

1.2 重定向错误

重定向标准错误输出的方法和STDOUT的方法没太大差别,只需要指定STDERR描述符即可, 有以下几种方法:

1 只重定向错误

2重定向错误和数据  

2 在脚本中重定向输出

可以在脚本中用STDOUT和STDERR文件描述符以在多个位置生成输出,只要简单地重定向相 应的文件描述符就可以,有两种方法在脚本中重定向输出

  • 临时重定向行输出

  • 永久重定向脚本中的所有命令

2.1 临时重定向

如果有意在脚本中生成错误消息,可以将单独的一行输出重定向到STDERR。你所需要坐的是 使用输出重定向符来将输出信息重定向到STDERR文件描述符。在重定向到文件描述符时,你 必须在文件描述符数字之前加一个&。

这样就会在脚本的STDERR文件描述符所指向的位置显示文本,而不是通常的STDOUT,下面 的例子就利用了该功能

 运行该脚本,但是结果看不出来有什么区别,默认情况下,Linux会将STDERR导向 STDOUT,但是如果你在运行脚本时重定向了STDERR,脚本中所有导向到SDTERR的文本会 被重定向。

2.2 永久重定向

如果脚本中有大量的数据需要重定向,那重定向每个echo语句就会很麻烦。取而代之,你可以 用exec命令告诉shell在脚本执行期间重定向某个待定文件描述符。

exec 指令会启动一个新shell将STDOUT文件描述符重定向到文件,脚本中发给STDOUT的所 有输出会被重定向到文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1560116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CANN训练营笔记】Atlas 200I DK A2体验手写数字识别模型训练推理

环境介绍 开发板&#xff1a;Huawei Atals 200I DK A2 内存&#xff1a;4G NPU&#xff1a;Ascend 310B4 CANN&#xff1a;7.0 准备环境 下载编译好的torch_npu wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/torch_npu-2.1.0rc1-cp39-cp39-linux_aarch…

sql之每日五题day01--多表联查/聚合函数

sql错题记录 含有聚合函数的不能用where升序排列order byleft join多表联查inner join不返回null三表联查 含有聚合函数的不能用where SQL19 分组过滤练习题 题目&#xff1a;现在运营想查看每个学校用户的平均发贴和回帖情况&#xff0c;寻找低活跃度学校进行重点运营&#x…

算法复习:链表

链表定义 struct ListNode { int val;ListNode *next;ListNode(int x) : val(x), next(nullptr) {} }; 链表的遍历&#xff1a;ListNode phead; while(p!null) pp.next; 找到链表的尾结点&#xff1a;phead; while(p.next!null)pp.next; 链表节点的个数&#xff1a; phead…

windows上配置Redis主从加哨兵模式实现缓存高可用

一、哨兵模式 哨兵&#xff08;sentinel&#xff09;是Redis的高可用性(High Availability)的解决方案&#xff1a;由一个或多个sentinel实例组成sentinel集群可以监视一个或多个主服务器和多个从服务器。当主服务器进入下线状态时&#xff0c;sentinel可以将该主服务器下的某…

基于PHP的新闻管理系统(用户发布版)

有需要请加文章底部Q哦 可远程调试 基于PHP的新闻管理系统(用户发布版) 一 介绍 此新闻管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。本新闻管理系统采用用户发布新闻&#xff0c;管理员审核后展示模式。 技术栈&am…

编曲知识15:重复段落编写 尾奏编写 家庭工作室搭建 硬件设备使用常识

15 重复段落编写 尾奏编写 家庭工作室搭建 硬件设备使用常识小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_6602a586e4b0694cc051476b?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 重复段落设计 第二段落指代间奏过后的段落 第二…

docker环境中宿主机防火墙添加ssh无法生效的问题分析

背景 在部署了docker容器的环境中&#xff0c;要在防火墙开通22端口&#xff0c;即ssh服务&#xff0c;以便在终端可以正常登陆。使用firewall-cmd在docker区域添加了22端口&#xff0c;但是没有起作用。后再public区域添加22端口才起作用。为什么docker区域不起作用&#xff…

数据结构与算法 顺序栈的基本运算

一、实验内容 编写一个程序sqstack.cpp&#xff0c;实现顺序栈的各种基本运算&#xff0c;并在此基础上写一个程序exp6.cpp,实现以下功能 初始化栈s判断栈是否为空依次进栈元素a,b,c,d,e判断栈是否为空输出出栈序列判断栈是否为空释放栈 二、实验步骤 1、sqstack.cpp 2、ex…

windows-MySQL5.7安装

1.安装包下载 https://downloads.mysql.com/archives/community/&#xff08;社区版下载链接&#xff09; 选择Archives可以下载历史包&#xff0c;此处使用5.7.43 2.解压文件 解压文件到你指定安装的目录&#xff1a;解压完成后在mysql-5.7.43-winx64下新建文件my.ini和d…

python中的deque详解

文章目录 摘要示例1:基本使用示例2:使用maxlen限制队列长度示例3:使用deque实现滑动窗口算法示例 4: 使用 deque 实现旋转数组示例 5: 使用 deque 实现最大/最小栈示例 6: 使用 deque 实现广度优先搜索(BFS)摘要 deque(双端队列)是Python标准库collections模块中的一个…

从0配置React

在本地安装和配置React项目&#xff0c;您可以使用create-react-app这个官方推荐的脚手架工具。以下是安装React的步骤&#xff0c;包括安装Node.js、使用create-react-app创建React应用&#xff0c;以及启动开发服务器。 下载安装node.js运行以下命令&#xff0c;验证Node.js…

《操作系统导论》第16章读书笔记:分段

《操作系统导论》第16章读书笔记&#xff1a;分段 —— 杭州 2024-03-31 夜 文章目录 《操作系统导论》第16章读书笔记&#xff1a;分段0.前言1.分段&#xff1a;泛化的基址/界限2.我们引用哪个段&#xff1f;3.栈怎么办4.支持共享5.细粒度与粗粒度的分段、操作系统支持6.小结7…

从vrrp、bfd、keepalived到openflow多控制器--理论篇

vrrp 在一个网络中&#xff0c;通常会使用vrrp技术来实现网关的高可用。 vrrp&#xff0c;即Virtual Router Redundancy Protocol&#xff0c;虚拟路由冗余协议。 应用场景 典型的如下面这个例子&#xff1a; 当Router故障后&#xff0c;将会导致HostA-C都无法连接外部的I…

嵌入式linux学习之opencv交叉编译

1.下载opencv源码 OpenCV官方源码下载链接为https://opencv.org/releases/&#xff0c;选择3.4.16版本下载。放在ubuntu系统~/opencv文件夹中&#xff0c;解压缩&#xff0c;opencv文件夹中新建build和install文件夹用于存放编译文件和安装文件&#xff1a; 2. 安装编译工具…

springboot配置文件application.properties,application.yml/application.yaml

application.properties Springboot提供的一种属性配置方式&#xff1a;application.properties 初始时配置文件中只有一行语句。 启动时&#xff0c;比如tomcat的端口号默认8080&#xff0c;路径默认。如果我们要改变端口号及路径之类的可以在application.properties中配置。…

【C语言环境】Sublime中运行C语言时MinGW环境的安装

要知道&#xff0c;GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的&#xff0c;如果我们想在 Windows 平台使用 GCC 编译器&#xff0c;可以安装 GCC 的移植版本。 目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种&#xff0c;分别为 MinGW 和 Cygwin…

【算法竞赛进阶指南】0x11 栈

0x11 栈 基础应用 两个栈维护前面区间的最小元素 41. 包含min函数的栈 - AcWing题库 可以开个小根堆维护最小值&#xff0c;但是这样时间是logN的。如果只用一个变量来存&#xff0c;一旦出现了出栈操作就无从下手了。因此用一个线性结构来保存每个历史时刻的最小值。 开两个…

vue3封装Element分页

配置当前页 配置每页条数 页面改变、每页条数改变都触发回调 封装分页 Pagination.vue <template><el-paginationbackgroundv-bind"$attrs":page-sizes"pageSizes"v-model:current-page"page"v-model:page-size"pageSize":t…

常用字符串函数及模拟实现

1.strlen() 用法:求字符串长度 size_t strlen(const char *Str) 参数:字符串的起始地址,可以传地址也可以直接传一个字符串 返回值:字符串长度 模拟实现: 自己实现求字符串长度的函数(三种方法)-CSDN博客 2.strcpy() 用法:拷贝字符串 char* strcpy(char*_Destination,co…

【PduR路由】IPduM模块详细介绍

目录 1.IpduM功能简介 2.IpduM模块依赖的其他模块 2.1RTE (BSW Scheduler) 2.2PDU Router 2.3COM 3.IpduM功能详解 3.1 功能概述 3.2 I-PDU多路复用I-PDU Multiplexing 3.2.1 Definitions and Layout 3.2.2通用功能描述 General 3.2.3模块初始化 Initialization 3.…