linux shell "<" 、 "<<" 、 ">" 、">>" ,"<<<"的含义
linux 关于标准输入输出的规定
Linux规定一下文件描述符
文件描述符 | 文件 | 对应设备 |
---|---|---|
0 | 标准输入 | keyboard,mouse |
1 | 标准输出 | 屏幕监视器 |
2 | 错误输出 | 屏幕监视器 |
输出重定向>,>>
>和>>都是输出重定向符号
- 其中
>
是重写 >>
是追加到文件
进阶
- 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.out
和file.err
。注意
:这两个重定向操作是同时进行的,并没有先后顺序。因此,标准输出和标准错误会分别被重定向到指定的文件,互不影响。
- 高级用法,难理解
基于上述认识,我们才能理解 "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将自动结束输入,并将输入的内容显示出来;
上手测试:
参考链接
更新2023.11.21
在Linux中,<<
和 <<<
都是用于输入重定向的特殊符号,但它们有不同的作用和用法。
-
<<
是用于输入多行文本的重定向符号。它的一般用法是:command << DELIMITER ... ... DELIMITER
在这个语法中,
command
是要执行的命令,DELIMITER
是一个自定义的分界符,...
表示要输入的多行文本。当Shell遇到<<
时,它会等待用户输入多行文本,直到遇到DELIMITER
为止。例如:
cat << END This is a multi-line text END
-
<<<
是用于输入单行文本的重定向符号。它的一般用法是:command <<< "text"
在这个语法中,
command
是要执行的命令,"text"
是要输入的单行文本。<<<
将会将"text"
的内容传递给command
作为标准输入。例如:
echo <<< "Hello, World!"
因此,<<
用于输入多行文本,而 <<<
用于输入单行文本,要加引号"才算一行。这两个符号在shell脚本中经常用于向命令传递输入。
测试:
- 环境:ubuntu18.04
- x86