Linux shell的标准输入、输出和错误

1.文件描述符

在linux shell执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名:

文件文件描述符
输入文件—标准输入0(缺省是键盘,为0时是文件或者其他命令的输出)
输出文件—标准输出1(缺省是屏幕,为1时是文件)
错误输出文件—标准错误2(缺省是屏幕,为2时是文件)
系统中实际上有12个文件描述符,我们可以任意使用文件描述符3到9.


2.文件重定向:改变程序运行的输入来源和输出地点

2.1.输出重定向:

Command > filename把标准输出重定向到一个新文件中
Command >> filename把标准输出重定向到一个文件中(追加)
Command > filename把标准输出重定向到一个文件中
Command > filename 2>&1把标准输出和错误一起重定向到一个文件中
Command 2 > filename把标准错误重定向到一个文件中
Command 2 >> filename把标准输出重定向到一个文件中(追加)
Command >> filename2>&1把标准输出和错误一起重定向到一个文件(追加)

2.2.输入重定向:

Command < filename > filename2Command命令以filename文件作为标准输入,以filename2文件作为标准输出
Command < filenameCommand命令以filename文件作为标准输入
Command << delimiter 从标准输入中读入,知道遇到delimiter分界符

2.3.绑定重定向

Command >&m把标准输出重定向到文件描述符m中
Command < &-关闭标准输入
Command 0>&-同上


3.shell重定向的一些高级用法

3.1.重定向标准错误

例子1:
command 2> /dev/null
如果command执行出错,将错误的信息重定向到空设备
例子2:
command > out.put 2>&1
将command执行的标准输出和标准错误重定向到out.put(也就是说不管command执行正确还是错误,输出都打印到out.put)。


3.2.exec用法
exec命令可以用来替代当前shell;换句话说,并没有启动子shell,使用这一条命令时任何现有环境变量将会被清除,并重新启动一个shell(重新输入用户名和密码进入)。
exec command
其中,command通常是一个shell脚本。
对文件描述符操作的时候用(也只有再这时候),它不会覆盖你当前的shell


例子1:
#!/bin/bash
#file_desc


exec 3<&0 0<name.txt
read line1
read line2
exec 0<&3
echo $line1
echo $line2


其中:
首先,exec 3<&0 0<name.txt的意思是把标准输入重定向到文件描述符3(0表示标准输入),然后把文件name.txt内容重定向到文件描述符0,实际上就是把文件name.txt中的内容重定向到文件描述符3。然后通过exec打开文件描述符3;

然后,通过read命令读取name.txt的第一行内容line1,第二行内容line2,通过Exec 0<&3关闭文件描述符3;

最后,用echo命令输出line1和line2。最好在终端运行一下这个脚本,亲自尝试一下。


例子2:
exec 3<>test.sh;
#打开test.sh可读写操作,与文件描述符3绑定
 
while read line<&3
 do
    echo $line;
done
#循环读取文件描述符3(读取的是test.sh内容)
exec 3>&-
exec 3<&-
#关闭文件的,输入,输出绑定


参考:

http://zqwt.012.blog.163.com/blog/static/1204468420103272857116/

http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html

http://blog.csdn.net/flowingflying/article/details/5201199

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

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

相关文章

微基准测试进入Java 9

我已经几个月没有在这里写文章了&#xff0c;这种例外也会继续下去。 我计划在明年三月左右恢复写作。 本文末尾的说明。 等待&#xff01; 不完全是最后&#xff0c;因为您可以向下滚动。 它在文章结尾处。 继续阅读&#xff01; 三年前&#xff0c;我在写有关Java编译器如何…

摆渡车(noip2018 pj t3)

摆渡车&#xff08;题目和测试右转 洛谷P5017&#xff09; 做法&#xff1a;dp各种优化(剪枝) 这道题考场上看了一脸懵逼...第一眼看这 tm 不是个一维dp吗...结果按着这个朦胧的思路&#xff0c;删删改改约莫0.5h&#xff0c;终于过了小样例&#xff0c;然后一测大样例...GG了。…

关于树的冷知识

1、为什么冬天树干刷白漆&#xff1f; 刷的是是石灰水&#xff0c;主要成分是石灰乳,还有食盐,大豆粉,石榴合剂。 好处一、石灰具有一定的杀菌、杀虫作用&#xff0c;可以杀死寄生在树干上的一些越冬的真菌、细菌和害虫。 好处二、由于害虫一般都喜欢黑色、航脏的地方&#x…

乐玩自动化测试模块_自动化测试模型(一)自动化测试模型介绍

一个自动化测试框架就是一个集成体系&#xff0c;在这一体系中包含测试功能的函数库&#xff0c;测试数据源&#xff0c;测试对象标准&#xff0c;以及各种可重用的模块。自动化测试在发展过程中经历了以下几个阶段&#xff0c;模块驱动测试&#xff0c;数据驱动测试及对象驱动…

linux特殊权限位之setuid、setgid和sticky

我们登陆到系统之后,创建一个普通文件或者目录的时候,会有一个默认的权限。普通文件是644,目录文件是755,想必大家都知道这个是由umask这个值决定的。我们可以直接执行umask命令查看&#xff0c;linux系统默认的umask值是0022。想改变创建文件默认的权限&#xff0c;我们直接修…

js获取当前时间,并实时更新

可以使用JavaScript的Date()对象来获取当前时间&#xff0c;并使用setInterval()函数实现实时更新。 以下是一个示例代码&#xff1a; <p id"time"></p>function updateTime() {var now new Date();var hours now.getHours();var minutes now.getMi…

11.23日常

整理相关资料&#xff0c;阅读c#课本转载于:https://www.cnblogs.com/JL3Peanut/p/10032318.html

python requests 10041报错_pythonrequests返回unicode异常消息(或如何设置请求区域设置)...

您可以尝试os.strerror&#xff0c;但它可能不会返回任何内容或相同的非英语字符串。在ENGLISH_WINDOWS_SOCKET_MESSAGES {10004: "Interrupted function call.",10013: "Permission denied.",10014: "Bad address.",10022: "Invalid argu…

深度学习(花书)

1.英文主页http://www.deeplearningbook.org/lecture_slides.html 2.中文主页https://github.com/exacity/deeplearningbook-chinese 在线阅读https://exacity.github.io/deeplearningbook-chinese/转载于:https://www.cnblogs.com/Eufisky/p/10010046.html

表面配准论文1--基于高阶图匹配方法的稠密表面配准

Dense Non-rigid Surface Registration Using High-Order Graph Matching 一.摘要提出高阶图匹配方程来解决非刚性表面配准问题&#xff0c;单阶项描述了几何和外观相似性&#xff08;曲率和纹理&#xff09;&#xff0c;高阶项对内部嵌入能量&#xff08;intrinsic embedding …

Apache Spark软件包,从XML到JSON

Apache Spark社区为扩展Spark付出了很多努力。 最近&#xff0c;我们希望将XML数据集转换为更易于查询的内容。 我们主要对每天进行的数十亿笔交易之上的数据探索感兴趣。 XML是一种众所周知的格式&#xff0c;但是有时使用起来可能很复杂。 例如&#xff0c;在Apache Hive中&a…

js中几种实用的跨域方法原理详解

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信&#xff0c;比如用ajax向一个不同的域请求数据&#xff0c;或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同&#xff0c;都被当作是不同的域。 下表给出了相对http://store.…

python中matplotlib画图_Python-matplotlib画图(莫烦笔记)

这个是我对于莫烦老师的matplotlib模块的视频做的一个笔记。1.前言Matplotlib是一个python的 2D绘图库&#xff0c;它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib&#xff0c;开发者可以仅需要几行代码&#xff0c;便可以生成绘图&#xff0c…

js词法分析

javascript词法分析函数在运行的瞬间&#xff0c;生成一个活动对象&#xff08;Active Object&#xff09;&#xff0c;简称AO&#xff1b;具体分为两个阶段&#xff1a;一.分析阶段JavaScript代码运行前有一个类似编译的过程即词法分析&#xff0c;词法分析主要有三个步骤&…

如何使一维数组一行一行的输出成二维数组的格式

以9个元素的数组为例&#xff0c;输出3x3的格式 基本思想是对每一个元素的index进行检查&#xff0c;当index是3,6,9等可以被3整除的数时&#xff0c;在打印它们之前&#xff0c;先打印一个\n。注意0也可以被3整除&#xff0c;但是此时不打印\n&#xff0c;所以要加上i>0的…

python我想对你说_python学习第3天-----字典、解构

1.字典1)定义&#xff1a;查找速度快&#xff0c;效率高&#xff1b;用{}括起来&#xff0c;内部使用key:value的形式来保存数据&#xff1b;键值对是无序的&#xff0c;不是按照定义的方式保存数据的(类似于json文件)&#xff0c;例如&#xff1a; {jay:周杰伦,jj::林俊杰}注&…

bms_output.put_line使用方法

https://blog.csdn.net/sxww321/article/details/4020300转载于:https://www.cnblogs.com/diyunpeng/p/10022923.html

linux 权限掩码 umask

一 权限掩码umaskumask是chmod配套的&#xff0c;总共为4位&#xff08;gid/uid,属主&#xff0c;组权&#xff0c;其它用户的权限&#xff09;,不过通常用到的是后3个&#xff0c;例如你用chmod 755 file&#xff08;此时这文件的权限是属主读(4)写(2)&#xff0b;执行(1),同…

ant 构建_有用的Ant构建标签

ant 构建问题&#xff1a; 如何在ant文件中执行以下任务&#xff1f; 制作zip文件。 运行命令。 将文件复制到远程计算机。 在远程Linux机器上运行命令。 打开输入框并响应输入值。 拨打蚂蚁电话。 答案&#xff1a; 1.制作zip文件&#xff1a; 以下是在ant中制作zip文…