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. 【转】tf.train.MonitoredTrainingSession()解析

    原文地址:https://blog.csdn.net/mrr1ght/article/details/81006343. 本文有删减. MonitoredTrainingSession定义 首先,tf ...

  2. Pytorch之Dataparallel源码解析

    之前对Pytorch 1.0 的Dataparallel的使用方法一直似懂非懂,总是会碰到各种莫名其妙的问题,今天就好好从源头梳理一下,更好地理解它的原理或者说说下步骤. 源码地址: https:// ...

  3. 19、Python标准库: 日期和时间

    一.time时间模块 import time 1 .时间戳   时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. time_stamp = tim ...

  4. linux查看大文件

    du -h --max-depth=1

  5. 压缩、解压命令——gzip、gunzip、tar、zip、bzip2

    1.gzip命令与gunzip命令(压缩解压文件): (1)gzip——压缩: 利用touch命令创建一个文件,并向里面写入内容: 对创建的文件进行压缩: (2)解压缩gzip -d或gunzip: ...

  6. 17-网页,网站,微信公众号基础入门(使用Adobe Dreamweaver CS6 制作网页/网站)

    https://www.cnblogs.com/yangfengwu/p/11351182.html https://www.cnblogs.com/yangfengwu/p/11200767.htm ...

  7. [Java] Spring boot 的maven设置阿里云仓库

    Spring boot 的maven设置阿里云仓库 打开根目录下的 pom.xml 文件,在对应为止出加入如下 红色 代码: <build> <plugins> <plu ...

  8. 洛谷 P1879 [USACO06NOV]玉米田Corn Fields 题解

    P1879 [USACO06NOV]玉米田Corn Fields 题目描述 Farmer John has purchased a lush new rectangular pasture compo ...

  9. spring注解式参数校验列表

    校验注释列表: @AssertFalse Boolean,boolean 验证注解的元素值是false @AssertTrue Boolean,boolean 验证注解的元素值是true @NotNu ...

  10. SHOI做题记录

    LOJ #2027. 「SHOI2016」黑暗前的幻想乡 考虑到每个公司一条边,那就等价于没有任何一家公司没有边. 然后就可以容斥+矩阵树定理,没了. LOJ #2028. 「SHOI2016」随机序 ...