十二、Shell篇——管道与重定向

前言

管道:进程通信的一个通信工具
重定向:可以将程序结果输出到某个文件,也可以将文件代替键盘作为输入

管道与管道符

管道和信号一样,也是进程通信的方式之一
匿名管道(管道符)是Shell编程经常用到的通信工具
管道符是“|”,将前一个命令执行的结果传递给后面的命令

  • ps | cat

(1)将第一条命令的输出作为第二条命令的输入

[email protected] Git % ls -l | more

(2)cat和ps都是外建命令,管道符会为这两条命令建立一个子进程(ps命令运行完了所以看不到进程名),外建命令是以子进程的方式运行的。由于内建命令执行过程是不会传递给父进程的,所以使用管道符时,应该避免使用内建命令。

[email protected] Git % cat | ps -f
  UID   PID  PPID   C STIME   TTY           TIME CMD
  501   965   964   0 10:18上午 ttys000    0:00.07 -zsh
  501  1008   965   0 10:34上午 ttys000    0:00.00 cat

重定向符号

一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
输入重定向符号“<”
 eg:read var < /path/to/a/file
输出重定向符号“>”、“>>”,“2>”,“&>”
 eg:echo 123 > /path/to/a/file
输入和输出重定向组合使用
 cat > /path/to/a/file <<EOF
 I am $USER
 EOF

(1)输入重定向-统计a.txt文件的行数

[email protected] test % wc -l < a.txt
       3

(2)输入重定向-将文件内容赋值给变量

[email protected] test % read var < a.txt
[email protected] test % echo $var
11

(3)输出重定向-将内容输出到文件中,原文件的内容会被清空

[email protected] test % echo $var >b.txt
[email protected] test % cat b.txt
11

(4)输出重定向-将内容输出到文件中,原文件的内容不会被清空

[email protected] test % echo $var >>b.txt
[email protected] test % cat b.txt
11
11

(5)错误重定向-有错误时不会打印在终端上,而是把错误信息输出到文件中

[email protected] test % nocmd
zsh: command not found: nocmd
[email protected] test % nocmd 2> c.txt
[email protected] test % cat c.txt
zsh: command not found: nocmd

(6)不管正确还是失败,都会讲结果输出到文件中

# 命令错误,将结果输出到文件中
[email protected] test % nocmd &> d.txt
[email protected] test % cat d.txt
zsh: command not found: nocmd
# 命令正确,将结果输出到文件中
[email protected] test % ls  &> d.txt
[email protected] test % cat d.txt
a.txt
b.txt
c.txt
d.txt

(7)输入输出重定向结合使用-一般是shell脚本用于生成一个配置文件,比如在.sh文件中生成一个e.txt

[email protected] test % cat aa.sh
#!/bin/bash
cat > e.txt <<EOF
echo "hello bash"
EOF
[email protected] test % bash aa.sh
[email protected] test % cat e.txt
echo "hello bash"

原文地址:https://blog.51cto.com/12936780/2485128

时间: 2024-11-12 23:34:10

十二、Shell篇——管道与重定向的相关文章

Linux Shell常用技巧(十二) Shell编程

Linux Shell常用技巧(十二) Shell编程 二十三. Bash Shell编程:  1.  读取用户变量:    read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY.下面的列表给出了read命令的常用方式: 命令格式 描述 read answer 从标准输入读取输入并赋值给变量answer. read first last 从标准输入读取输入到第

#HTTP协议学习# (十二)理解转发与重定向

本文转自:http://blog.csdn.net/meiyalei/article/details/2129120  生动清晰 解释一 转发是服务器行为,重定向是客户端行为.为什么这样说呢,这就要看两个动作的工作流程: 转发过程:客户浏览器发送http请求---->web服务器接受此请求-->调用内部的一个方法在容器内部完成请求处理和转发动作---->将目标资源发送给客户:在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的r

Shell篇之八 输入输出重定向

输出重定向:是指不使用系统提供的标准输入端口来输出,而是重新指定其他来进行输出.例如在终端输入的字符串本来是要输出到终端屏幕上的,但可以将输出指定为其他文件,将输入字符串输出到该文件中,而不再是屏幕上. 输入重定向:是指不使用系统提供的标准输入端口来输入,而是重新指定其他来进行输入.例如本来是通过终端标准输入端口来作为输入,但可以将输入指定为其他文件,将该文件内容输出打印在终端屏幕上. 大多数 Linux 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的

Vue.js 源码分析(二十二) 指令篇 v-model指令详解

Vue.js提供了v-model指令用于双向数据绑定,比如在输入框上使用时,输入的内容会事实映射到绑定的数据上,绑定的数据又可以显示在页面里,数据显示的过程是自动完成的. v-model本质上不过是语法糖.它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理.例如: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <ti

Linux Shell常用技巧(十二)

二十三. Bash Shell编程:  1.  读取用户变量:    read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY.下面的列表给出了read命令的常用方式: 命令格式 描述 read answer 从标准输入读取输入并赋值给变量answer. read first last 从标准输入读取输入到第一个空格或者回车,将输入的第一个单词放到变量first中

Linux shell管道与重定向及实例分析

一.管道 管道命令操作符是:"|",它仅能处理由前面一个命令的正确输出信息,也就是standard output的信息,对于stdandard error信息没有直接处理能力:然后,传递给下一个命令,作为标准输入standard input. linux管道执行过程: 管道命令使用说明: command1正确输出,作为command2的输入,然后command2的输出作为command3的输入,command3的输出打印到屏幕上: 通过管道:command1.command2的正确输出

Python开发【第二十二篇】:Web框架之Django【进阶】

Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 新随笔 联系 订阅 管理 随笔-124  文章-127  评论-205 Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻

SaltStack 学习笔记 - 第十二篇: SaltStack Web 界面

SaltStack 有自身的用python开发的web界面halite,好处是基于python,可以跟salt的api无缝配合,确定就比较明显,需要个性化对web界面进行定制的会比较麻烦,如果喜欢体验该界面的可以参考下面的文章  http://rfyiamcool.blog.51cto.com/1030776/1275443/ 我是运用另一个python+php来进行web开发,具体需要的工具有在我的另一篇文章里面介绍过,这里再重新进行整个开发介绍 首先介绍php 跟python通信的工具 pp

第二十二篇:再写Windows驱动,再玩Windbg---NET

2011年到现在,就没再怎么搞过Windows驱动了. 最近, 由于项目需要, 试着改一改一个显卡驱动(KMDOD), 从实践上证明, 我在理论上对一个驱动的架构的正确与否.(USB Display = KMDOD + AVStream). 其中, KMDOD是完成显示的部分功能, 完成其中的VidPN(Video present network), 将驱动中原来的POST物理设备转变为USB物理设备. 而AVStream之所以这样提出, 完成是由于USB Video class的启发, 要不然