stdin,stdout,stderr

stdin=0

stdout=1

stderr=2

使用tee来传递内容,把stdout 作为stdin 传到下个命令

root@172-18-21-195:/tmp/pratice# echo "who is this" | tee -  # -相当于传入到stdout,所以打印2次
who is this
who is this
root@172-18-21-195:/tmp/pratice# echo "who is this" | tee - | cat -n # cat -n 是显示行数
1 who is this
2 who is this

把stderr给导入指定地方

root@172-18-21-195:/tmp/pratice# ls asdf out.txt 2>/dev/null  1>/dev/null
root@172-18-21-195:/tmp/pratice# ls asdf out.txt &>out.txt # 可以简写成这样,也可以写成2>&1 这样,二选一
root@172-18-21-195:/tmp/pratice# cat out.txt
ls: cannot access asdf: No such file or directory
out.txt
1. 将文件重定向到命令

借助小于号(<),我们可以像使用stdin那样从文件中读取数据:

$ cmd < file
2. 重定向脚本内部的文本块

可以将脚本中的文本重定向到文件。要想将一条警告信息添加到自动生成的文件顶部,可以

使用下面的代码:

root@172-18-21-195:/tmp/pratice# cat << EOF >log.txt
> this is a test for log.txt
> EOF
root@172-18-21-195:/tmp/pratice# cat log.txt
this is a test for log.txt

出现在cat <log.txt与下一个EOF行之间的所有文本行都会被当作stdin数据。

log.txt文件的内容显示如下:

3. 自定义文件描述符

文件描述符是一种用于访问文件的抽象指示器(abstract indicator)。存取文件离不开被称为

“文件描述符”的特殊数字。 0 、 1 和 2 分别是 stdin 、 stdout 和 stderr 预留的描述符编号。

exec 命令创建全新的文件描述符。如果你熟悉其他编程语言中的文件操作,那么应该对文

件打开模式也不陌生。常用的打开模式有3种。

  1. 只读模式。
  2. 追加写入模式。
  3. 截断写入模式。

    < 操作符可以将文件读入 stdin 。 > 操作符用于截断模式的文件写入(数据在目标文件内容被

    截断之后写入)。 >> 操作符用于追加模式的文件写入(数据被追加到文件的现有内容之后,而且

    该目标文件中原有的内容不会丢失)。文件描述符可以用以上3种模式中的任意一种来创建。

创建一个用于读取文件的文件描述符

[root@dns-node2 tmp]# cat input.txt
aaa
bbb
ccc [root@dns-node2 tmp]# exec 3<input.txt # 创建一个新的描述符3, 3和<和input.txt之间千万不能有空格,必须紧挨着。
[root@dns-node2 tmp]# cat <&3
aaa
bbb
ccc

如果要再次读取,我们就不能继续使用文件描述符 3 了,而是需要用 exec 重新创建一个新的

文件描述符(可以是 4 )来从另一个文件中读取或是重新读取上一个文件。

创建一个用于写入(截断模式)的文件描述符:

[root@dns-node2 tmp]# exec 4>output.txt
[root@dns-node2 tmp]# echo newline >&4 # &在这里可以理解为获取4这个FD的内存地址(个人理解,该理解来自go语言)
[root@dns-node2 tmp]# cat output.txt
newline

追加模式

[root@dns-node2 tmp]# exec 5>>input.txt
[root@dns-node2 tmp]# echo Append line >&5
[root@dns-node2 tmp]# cat input.txt
aaa
bbb
ccc
Append line

shell基础知识之 stdin,stdout,stderr和文件描述符的更多相关文章

  1. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

  2. file descriptor 0 1 2 一切皆文件 stdout stderr stdin /dev/null 沉默是金 pipes 禁止输出 屏蔽 stdout 和 stderr 输入输出重定向 重定向文件描述符

    movie.mpeg.001 movie.mpeg.002 movie.mpeg.003 ... movie.mpeg.099   $cat movie.mpeg.0*>movie.mpeg   ...

  3. Linux Shell 文件描述符 及 stdin stdout stderr 重定向

    Abstract: 1) Linux Shell 命令的标准输入.标准输出.标准错误,及其重定位: 2)Linux Shell 操作自定义文件描述符: 文件描述符是与文件相关联的一些整数,他们保持与已 ...

  4. (文件描述符0、1、2),(stdin、stdout、stderr),(终端设备)这三者之间的关系???

    前言 在Linux系统中,一切设备都看作文件.而每打开一个文件,就有一个代表该打开文件的文件描述符.程序启动时默认打开三个I/O设备文件:标准输入文件stdin,标准输出文件stdout,标准错误输出 ...

  5. WorkerMan源码分析(resetStd方法,PHP中STDIN, STDOUT, STDERR的重定向)

    WorkerMan中work.php中 resetStd 方法中代码如下 public static function resetStd() { if (!static::$daemonize || ...

  6. shell基础知识总结

    1. shell 对于一台计算机而言,其硬件受系统内核的控制,使用者想要控制计算机,就必须有与系统内核进行通讯的手段.而shell就是使用者与计算机进行通讯的手段之一.从命名上看,shell其实是相对 ...

  7. stdin stdout stderr 标准I/O流

    Unix中一切皆文件,磁盘等设备在操作系统来看都是文件. 对文件进行操作时,需要打开这个文件,并获得文件描述符(file descriptor, fd) 而每个进程生来就有三个文件描述符绑定在它身上, ...

  8. Linux Shell 基础知识(一)

    1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 ​ GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...

  9. stdin stdout stderr - 标准 I/O 流

    Fd #include <stdio.h> Fd extern FILE *stdin; Fd extern FILE *stdout; Fd extern FILE *stderr; D ...

随机推荐

  1. python基础知识字符串与元祖

    https://blog.csdn.net/hahaha_yan/article/details/78905495 一.字符串的类型 ##表示字符串: 'i like the world' " ...

  2. 安装单机es

    1.安装JDK(1.8)2.上传解压Elasticsearch-5.4.33.创建一个普通用户,然后将对于的目录修改为普通用户的所属用户和所属组4.修改配置文件config/elasticsearch ...

  3. 关于System.TypeInitializationException异常

    什么是System.TypeInitializationException 作为类初始值设定项引发的异常的包装器而引发的异常. 继承 Object Exception SystemException ...

  4. haproxy 2.0 dataplaneapi rest api 转为graphql docker 镜像

    为了方便直接使用haproxy dataplaneapi graphql 格式的查询,制作了一个简单的docker 镜像 基于dotenv 进行配置管理,可以直接通过环境变量传入参数,处理不同hapr ...

  5. JS的ES6的Promise

    一.Promise 1.什么是Promise对象:代表未来某个将要发生的事件,一般指的是异步操作. 2.Promise对象 存在的目的:将异步操作以同步的流程表达出来,避免层层嵌套的回调函数(俗称回调 ...

  6. CSPS_115

  7. 洛谷P4170 [CQOI2007]涂色题解

    废话: 这个题我第一眼看就是贪心呐, 可能是我之前那做过一道类似的题这俩题都是关于染色的 现在由于我帅气无比的学长的指导, 我已经豁然开朗, 这题贪心不对啊, 当时感觉自己好厉害贪心都能想出来 差点就 ...

  8. luoguP1118 [USACO06FEB]数字三角形`Backward Digit Su`… 题解

    一上午都在做有关搜索的题目,,, 看到这题之后就直接开始爆搜 结果只有70分, 其余的点硬生生的就是那么WA了. 我的天哪~ 70分代码: #include<iostream> #incl ...

  9. [golang]数据库字典生成器-dataDictionary

    dataDictionary 介绍 生成数据字典 应用场景 根据mysql数据库生成html格式数据字典,目前仅支持macos/linux/windows 使用步骤 运行程序 windows: dat ...

  10. mac mysql 使用注意事项

    mac mysql 使用注意事项 .安装 直接通过下载官网上的dmg安装包进行安装,mysql--osx10.-x86_64(我的安装文件) ,安装完成后在系统偏好设置里面有mysql选项,我们可以通 ...