shell基础知识之 stdin,stdout,stderr和文件描述符
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种。
- 只读模式。
- 追加写入模式。
- 截断写入模式。
< 操作符可以将文件读入 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和文件描述符的更多相关文章
- Linux shell基础知识(上)
Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...
- 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 ...
- Linux Shell 文件描述符 及 stdin stdout stderr 重定向
Abstract: 1) Linux Shell 命令的标准输入.标准输出.标准错误,及其重定位: 2)Linux Shell 操作自定义文件描述符: 文件描述符是与文件相关联的一些整数,他们保持与已 ...
- (文件描述符0、1、2),(stdin、stdout、stderr),(终端设备)这三者之间的关系???
前言 在Linux系统中,一切设备都看作文件.而每打开一个文件,就有一个代表该打开文件的文件描述符.程序启动时默认打开三个I/O设备文件:标准输入文件stdin,标准输出文件stdout,标准错误输出 ...
- WorkerMan源码分析(resetStd方法,PHP中STDIN, STDOUT, STDERR的重定向)
WorkerMan中work.php中 resetStd 方法中代码如下 public static function resetStd() { if (!static::$daemonize || ...
- shell基础知识总结
1. shell 对于一台计算机而言,其硬件受系统内核的控制,使用者想要控制计算机,就必须有与系统内核进行通讯的手段.而shell就是使用者与计算机进行通讯的手段之一.从命名上看,shell其实是相对 ...
- stdin stdout stderr 标准I/O流
Unix中一切皆文件,磁盘等设备在操作系统来看都是文件. 对文件进行操作时,需要打开这个文件,并获得文件描述符(file descriptor, fd) 而每个进程生来就有三个文件描述符绑定在它身上, ...
- Linux Shell 基础知识(一)
1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...
- stdin stdout stderr - 标准 I/O 流
Fd #include <stdio.h> Fd extern FILE *stdin; Fd extern FILE *stdout; Fd extern FILE *stderr; D ...
随机推荐
- python测试开发django-66.图片403forbidden
前言 用 django 开发 web 页面,在 HTML 页面上添加图片时,发现本地图片可以正常显示,但是添加一个互联网的图片,却不能正常显示. 本地 static 图片 先在本地 static 放一 ...
- 201671030104 邓海祥 实验十四 团队项目评审&课程项目总结
项目 内容 课程名称 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 课程学习目标 (1)掌握软件项目评审会流程:(2)反思 ...
- Nuxt.js 提供了两种发布部署应用的方式:服务端渲染应用部署 和 静态应用部署
官方网址:https://zh.nuxtjs.org/guide/commands/#%E5%8F%91%E5%B8%83%E9%83%A8%E7%BD%B2
- Ruby for
#!/usr/bin/ruby -w# -*- coding: UTF-8 -*-for i in 1..5 print i," "endprint "\n"f ...
- LeetCode 301. Remove Invalid Parentheses
原题链接在这里:https://leetcode.com/problems/remove-invalid-parentheses/ 题目: Remove the minimum number of i ...
- Linux/Windows 配置config 使用ssh连接
Linux 产看本地是否有ssh 公私钥 1 cd ~/.ssh 2 ls -a 有的话继续(没有 ssh-keygen 生成) 将公钥内容复制到要连接的服务器用户下 方法一 ssh-copy-id ...
- [RN] React Native 使用 阿里巴巴 矢量图标库 iconfont
React Native 使用 阿里巴巴 矢量图标库 iconfont 文接上文: React Native 使用精美图标库react-native-vector-icons 本文主要讲述 如何 使用 ...
- for、for...in、for...of的区别
当有一个元素未定义时,for和for...of遍历该元素为undefined,for...in遍历不到. 如果是自定义属性,for和for...of无法遍历,for...in可以遍历. for...i ...
- CCF 201803-3 URL映射
CCF 201803-3 URL映射 试题编号: 201803-3 试题名称: URL映射 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 URL 映射是诸如 Django. ...
- 第03组 Beta冲刺(3/4)
队名:不等式方程组 组长博客 作业博客 团队项目进度 组员一:张逸杰(组长) 过去两天完成的任务: 文字/口头描述: 制定了初步的项目计划,并开始学习一些推荐.搜索类算法 GitHub签入纪录: 暂无 ...