标准流/管道符

标准流/管道符

参考:

https://www.runoob.com/linux/linux-shell-io-redirections.html

https://program-think.blogspot.com/2019/11/POSIX-TUI-from-TTY-to-Shell-Programming.html?q=bash&scope=all

pipeline(管道符),将前一个命令的stdout做为后一个命令的stdin,采用FIFO

概述

在POSIX系统中,每个进程都内置了三个“standard stream”(标准流),stdin(标准输入流),stdout(标准输出流),stderr(标准错误输出流)

当你在程序中打开某个文件,会得到一个“文件描述符”(洋文叫“file descriptor”,简称 fd)。fd 本身是个整数,程序员可以通过 fd 对该文件进行读写。
而进程的三个【标准流】,就相当于是三个特殊的 fd。当进程启动时,操作系统就已经把这三个 fd 准备好了。
由于这三个玩意儿是预先备好滴,所以它们的数值分别是:0、1、2(参见上图中 # 后面的数字)。

标准流的重定向

  • 输入流重定向

    把某个文件重定向为stdin;此时进程通过stdin读取的是该文件内容。使用<来表示

    cat < 文件名
    

    注意echo 使用的并不是输入流,而是命令行参数,cat命令就是输入流,类似的还有wc

  • 输出流重定向

    把stdout重定向到某个文件,>覆盖文件内容,>>追加文件内容

    echo hello > redirect
    echo hello >> redirect
    

    2>&1 表示将stderr(2)合并到stdout(1)

    echo hello > redirect 2>&1
    echo hello >> redirect 2>&1
    

cat命令还可以起到类似“文件复制”效果

cat < src > dest

某些同学可能会问了:既然能这么玩,为啥还需要用 cp 命令进行文件复制捏?
原因在于:cat 的玩法,只保证内容一样,其它的不管;而 cp 除了复制文件内容,还会确保“目标文件”与“源文件”具有相同的属性(比如 mode)。

原文地址:https://www.cnblogs.com/kikochz/p/13800185.html