linux shell "<" 、 "<<" 、 ">" 、">>" ,"<<<"的含义

linux 关于标准输入输出的规定

Linux规定一下文件描述符

文件描述符 文件 对应设备
0 标准输入 keyboard,mouse
1 标准输出 屏幕监视器
2 错误输出 屏幕监视器

image

输出重定向>,>>

>和>>都是输出重定向符号

  • 其中>是重写
  • >>是追加到文件
    image

进阶

  1. Shell中 1>&2 2>&1 &> 重定向的含义
  • 通常1>简写成>指的是标准输出
    实例:

    # ll test01.txt test02.txt 1>file.out 2>file.err
    

    命令执行,没有任何返回值,原因是,返回值都重定向到相应的文件中了,而不再在前端显示。
    在这个命令中,1代表标准输出(stdout),2代表标准错误(stderr)。当你使用命令ll test01.txt test02.txt 1>file.out 2>file.err时,标准输出和标准错误会被分别重定向到file.outfile.err

    注意:这两个重定向操作是同时进行的,并没有先后顺序。因此,标准输出和标准错误会分别被重定向到指定的文件,互不影响。

  1. 高级用法,难理解
    基于上述认识,我们才能理解 "1>&2" 和 "2>&1".。
    1>&2  正确返回值传递给2输出通道, &2表示2输出通道 ,如果此处错写成 1>2, 就表示把1输出重定向到文件2中了。
    2>&1 错误返回值传递给1输出通道,&1表示1输出通道
    总结就是&表示通道,不加&后面直接写到文件
    实例:
"2>&1"和"2>1"在shell中有着不同的含义:

- "2>&1"表示将标准错误(stderr)重定向到标准输出(stdout)。这意味着标准错误和标准输出都会发送到同一个地方,通常是终端或重定向的位置。

- "2>1"表示将标准错误重定向到一个名为"1"的文件。这意味着标准错误会被写入一个名为"1"的文件中,而不是作为标准输出的一部分。

因此,这两个表达式的含义是不同的,你需要根据具体的需求来选择使用哪一个。

输入重定向

输出重定向的符号是<,注意输出重定向只能从文件中获取
语法1: # cat < /etc/passwd 而输入重定向,cat < /etc/passwd ,它是将passwd文件指定为输入设备,并将内容显示到控制台。

语法2.# cat << delimiter(交互式)

cat < <delimiter (这个字符串字符是任意的,没有任何含义)

它的作用是将这个 delimiter 字符之前的内容(document) 作为输入传递给 cat

碰到delimiter将自动结束输入,并将输入的内容显示出来;
上手测试:
image

参考链接

1>&2,2>&1用法

更新2023.11.21

在Linux中,<<<<< 都是用于输入重定向的特殊符号,但它们有不同的作用和用法。

  1. << 是用于输入多行文本的重定向符号。它的一般用法是:

    command << DELIMITER
    ...
    ...
    DELIMITER
    

    在这个语法中,command 是要执行的命令,DELIMITER 是一个自定义的分界符,... 表示要输入的多行文本。当Shell遇到<<时,它会等待用户输入多行文本,直到遇到DELIMITER为止。

    例如:

    cat << END
    This
    is
    a
    multi-line
    text
    END
    
  2. <<< 是用于输入单行文本的重定向符号。它的一般用法是:

    command <<< "text"
    

    在这个语法中,command 是要执行的命令,"text" 是要输入的单行文本。<<< 将会将"text"的内容传递给command作为标准输入。

    例如:

    echo <<< "Hello, World!"
    

因此,<< 用于输入多行文本,而 <<< 用于输入单行文本,要加引号"才算一行。这两个符号在shell脚本中经常用于向命令传递输入。

测试:

  • 环境:ubuntu18.04
  • x86
    image
posted @ 2023-11-20 15:35  学不会xuebuhui  阅读(1037)  评论(0编辑  收藏  举报
Language: javascript