0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

shell脚本基础:重定向和管道符

FPGA学姐 来源:FPGA学姐 2023-05-04 11:09 次阅读

重定向符

一、输出重定向

标准输出的目标位置通常指向的是终端屏幕。可以使用>符号修改标准输出的目标位置。比如下面的示例就会将ps命令的输出重定向到result.txt文件。描述符和>之间不能有空格

$ ps > result.txt  ←----- 由于已经重定向到 result.txt 文件,所以屏幕上不会输出任何内容
$ cat result.txt
  PID TTY          TIME CMD
10745 pts/0    0000 bash
10873 pts/0    0000 ps

如果文件已经存在,则该文件会被覆盖,文件内容将丢失

如果不想使用>覆盖原文件,而想向原文件追加写入,可以使用>>重定向

$ echo line1 >> echo.txt
$ echo line2 >> echo.txt
$ echo line3 >> echo.txt
$ cat echo.txt
line1
line2
line3

重定向并不是命令的功能,而是shell的功能,只要命令能将执行结果输出到标准输出,就可以实现重定向。但是只有标准输出会被重定向,标准错误输出还是会直接显示到屏幕上,那么如何将错误输出重定向?

可以使用2>符号,数字2是称为文件描述符的编号

$ ls /xxx 2> error.txt
$ cat error.txt
ls: 无法访问'/xxx': 没有那个文件或目录

0edc28de-e633-11ed-ab56-dac502259ad0.png

也就是说例子1中相当于是1>

或者2>>指令对错误进行重定向

$ ls /xxx 2>> error.txt
$ cd /xxx 2>> error.txt
$ cat error.txt
ls: 无法访问 '/xxx': 没有那个文件或目录
-bash:cd:/xxx:没有那个文件或目录

标准输出和标准错误输出重定向到同一个文件(n>&m的含义是将文件描述符n设置为文件描述符m的副本)

$ ls /usr /xxx > ls_result.txt 2>&1

输出到不同文件(将ls命令的标准输出重定向到result.txt文件,并将标准错误输出重定向到error.txt文件)

$ ls /usr /xxx > result.txt 2> error.txt

使用分组命令重定向(如果想在使用{ }时将多条命令写到一行,需要在每条命令后面加上;)

#!/bin/bash
{
    date +%Y-%m-%d
    echo '/usr list'
    ls /usr
} > result.txt
#------------------------------------------------------------
$ { date +%Y-%m-%d; echo '/usr list'; ls /usr; } > result.txt

分组命令的{后面要有空格,还可以使用( )代替{ }

二、输入重定向

$ tr b B
abcd←-----从键盘输ru
aBcd     ←----- b 被替换为 B
my book  ←----- 从键盘输入
my Book  ←----- b 被替换为 B

tr命令对键盘输入的东西进行替换吧

$ cat word.txt
abcd                 ←----- word.txt 文件的内容
my book
$trbB< word.txt  ←----- 将 word.txt 文件重定向为输入源省略0<
aBcd
my Book

管道

命令的输出内容除了可以重定向输出到文件,还可以作为其他命令的输入使用。

使用less命令显示ls命令的标准输出内容

$ ls | less
...            <-----(本行及以下5行)less 命令输出示例
Documents      
Movies         
Music          
Public         
(END)

等效于

$ ls > result.txt
$ less < result.txt

注意:管道只会将前一条命令的标准输出传递给之后的命令,而第1条命令的标准错误输出则不会传递给后面的命令。

$ ls /usr/bin | grep 'py' | wc -l
6

如果使用管道来连接一个同时显示标准输出和标准错误输出的命令,那么屏幕上将只显示标准错误输出的内容。如果想将标准错误输出和标准输出一起传递给后面的命令,那么使用前面介绍的2>&1这种重定向方式即可

$ ls /usr /xxx 2>&1 | less
ls: 无法访问'/xxx': 没有那个文件或目录

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 文件
    +关注

    关注

    1

    文章

    540

    浏览量

    24402
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
  • Shell
    +关注

    关注

    1

    文章

    358

    浏览量

    22903
  • 脚本
    +关注

    关注

    1

    文章

    372

    浏览量

    14636
  • Shell脚本
    +关注

    关注

    0

    文章

    33

    浏览量

    7912

原文标题:shell脚本基础(四)重定向和管道符

文章出处:【微信号:FPGA学姐,微信公众号:FPGA学姐】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    shell脚本进阶】几个常用的shell进阶脚本

    shell脚本进阶】几个常用的shell进阶脚本
    的头像 发表于 09-19 08:59 1449次阅读
    【<b class='flag-5'>shell</b><b class='flag-5'>脚本</b>进阶】几个常用的<b class='flag-5'>shell</b>进阶<b class='flag-5'>脚本</b>

    shell核心知识常见符号和流程控制:13.1 重定向 管道符

    Shell
    充八万
    发布于 :2023年07月12日 11:18:39

    Linux后台程序重定向的问题

    目前有一种方法是在程序后台启动的时候,直接重定向到某个shell或telnet。方法如下:如tty命令查看目标shell为 /dev/pts/0./yourapp & > /dev
    发表于 08-22 13:54

    linux shell数据重定向(输入重定向与输出重定向)详细分析

    使用实例介绍这些默认的输出,输入都是linux系统内定的,我们在使用过程中,有时候并不希望执行结果输出到屏幕。我想输出到文件或其它设备。这个时候我们就需要进行输出重定向了。linux shell下常用
    发表于 03-02 13:59

    嵌入式Linux Shell脚本的面试题你知道做吗

    题一:在shell脚本成功执行前,如何中断脚本执行?思考过后,再到下方寻找答案 题二:如何使用Linux命令来移除文件头?思考过后,再到下方寻找答案 题三:一个Linux进程经历的各个阶段?思考
    发表于 08-20 10:02

    Linux Shell系列教程之(十六) Shell输入输出重定向

      一、Shell输入输出重定向概述  在了解重定向相关知识之前,我们先来看看Linux的文件描述符。  Linux的文件描述符可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c
    发表于 09-12 15:53

    实现printf函数的重定向

    目录重定向函数属性设置重定向函数在配置好串口之后需要在相关文件中添加以下函数以实现printf函数的重定向//注意添加头文件#include "stdio.h"#ifdef
    发表于 08-24 07:09

    shell脚本最简明的教程

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合
    的头像 发表于 10-16 11:27 4359次阅读
    <b class='flag-5'>shell</b><b class='flag-5'>脚本</b>最简明的教程

    管道符重定向与环境变量

    1.标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。 3.错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。 表2 输出重定向中用到的符号及其
    发表于 04-29 08:48 509次阅读

    Keil下使用STlink重定向printf的配置

    Keil下使用STlink重定向printf的配置1. printf 重定向Keil默认下使用Micro LIB库,该库调用 fputs 实现 printf,所以需要重新定义fputs函数,以重定向
    发表于 12-27 18:43 18次下载
    Keil下使用STlink<b class='flag-5'>重定向</b>printf的配置

    109个实用shell脚本分享

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合
    的头像 发表于 03-16 08:58 2263次阅读

    Linux中shell脚本编程

    编译型语言:如 c语言解释型语言:shell 脚本
    的头像 发表于 04-18 11:58 2835次阅读

    shell脚本基础知识

    shell脚本是一个文件,里面存放的是特定格式的指令,系统可以使用脚本解析器翻译或解析指令并执行(无需编译),shell脚本的本质是
    的头像 发表于 04-17 15:00 717次阅读

    Linux I/O重定向详解

    Linux I/O重定向可以定义为,更改从命令读取输入到命令发送输出的方式。你可以重定向命令的输入和输出。对于重定向符号,可以是 或者 | 。
    的头像 发表于 05-04 14:34 590次阅读

    linux知识中常用到的管道符号有哪些

    作为一个高级linux运维人员所要知道的,为什么要少用管道符?并不是说方便就可以大量使用,我们需要考虑到其执行的速度及效率,下面一起通过实例看看管道符要少用的原因!
    发表于 09-29 07:00 975次阅读