• shell_53.理解Linux输入和输出


    理解输入和输出
    1.两种显示脚本输出的方法。
    (1)在显示器屏幕上显示输出。
    (2)将输出重定向到文件中。

    2.标准文件描述符
    Linux 系统会将每个对象当作文件来处理,这包括输入和输出。Linux 用文件描述符来标识每个文件对象。
    文件描述符是一个非负整数,唯一会标识的是会话中打开的文件。每个进程一次到最多可以打开 9 个文件描述符。
    出于特殊目的,bash shell 保留了前 3 个文件描述符(0、1 和 2),
    文件描述符缩写描述

    1. 0         STDIN     标准输入
    2. 1         STDOUT     标准输出
    3. 2         STDERR     标准错误

    (1)STDIN
    STDIN 文件描述符代表 shell 的标准输入。对终端界面来说,标准输入就是键盘。shell 会从STDIN 文件描述符对应的键盘获得输入并进行处理。
    当在命令行中只输入 cat 命令时,它会从 STDIN 接收输入。输入一行,cat 命令就显示一行。

    1. $ cat
    2. this is a test
    3. this is a test
    4. this is a second test.
    5. this is a second test.

    也可以通过输入重定向符强制 cat 命令接收来自 STDIN 之外的文件输入:

    1. $ cat < testfile
    2. This is the first line.
    3. This is the second line.
    4. This is the third line.
    5. $

    (2)STDOUT
    STDOUT 文件描述符代表 shell 的标准输出。在终端界面上,标准输出就是终端显示器。
    shell的所有输出(包括 shell 中运行的程序和脚本)会被送往标准输出,也就是显示器。
    大多数 bash 命令会将输出送往 STDOUT 文件描述符。

    1. $ ls -l > test2 
    2. $ cat test2 
    3. total 20 
    4. -rw-rw-r-- 1 rich rich 53 2020-06-20 11:30 test 
    5. -rw-rw-r-- 1 rich rich 0 2020-06-20 11:32 test2 
    6. -rw-rw-r-- 1 rich rich 73 2020-06-20 11:23 testfile 
    7. $

    通过输出重定向符(>),原本应该出现在屏幕上的所有输出被 shell 重定向到了指定的文件。
    也可以使用>>将数据追加到某个文件:

    1. $ who >> test2 
    2. $ cat test2 
    3. total 20 
    4. -rw-rw-r-- 1 rich rich 53 2020-06-20 11:30 test 
    5. -rw-rw-r-- 1 rich rich 0 2020-06-20 11:32 test2 
    6. -rw-rw-r-- 1 rich rich 73 2020-06-20 11:23 testfile 
    7. rich pts/0 2020-06-20 15:34 (192.168.1.2
    8. $

    STDOUT不会输出错误信息

    1. $ ls -al badfile > test3 
    2. ls: cannot access badfile: No such file or directory 
    3. $ cat test3 
    4. $


    (3)STDERR
    shell 通过特殊的 STDERR 文件描述符处理错误消息。STDERR 文件描述符代表 shell 的标准错误输出。
    shell 或运行在 shell 中的程序和脚本报错时,生成的错误消息都会被送往这个位置。

  • 相关阅读:
    第七章 设计zrlog项目的测试用例(7.1章节)
    ARM的七种工作模式
    java网络通信:Springboot整合Websocket
    Android Verity Boot(AVB)验证原理
    Mac 安装nvm
    Java接口的相关知识
    Leetcode 1636. 按照频率将数组升序排序
    问题求解——嵌套列表
    netty中的核心MessageToMessage编码器
    golang context 内存大小
  • 原文地址:https://blog.csdn.net/mmmmm168m/article/details/134068372