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将自动结束输入,并将输入的内容显示出来;
上手测试: