Linux - 输入输出重定向及管道符
输入输出重定向#
- 标准输入(0)
- 标准输出(1)
- 错误输出(2)
程序接收用户标准输入,根据输入的指令执行程序,执行完成后进行标准输出,当程序异常时,会有错误输出。
输入重定向:把文件导入到命令中
输出重定向:把命令输出的信息导入到文件中
- 标准输出重定向
- 错误输出重定向
- 清空写入模式
- 追加写入模式
# 将标准输出重定向到文件内
$ echo 111 > log
# 将标准输入重定向到指定文件
# 控制台就不会接收键盘指令了,直接从文件读取输入
$ read a < log
# 将内容标准输出
$ echo $a
111
# 错误输出;123 为不存在的目录
# 错误信息并没有重定向到文件内,而是在控制台输出了
$ ls 123 > error
ls: 123: No such file or directory
# 默认为标准输出,不需要添加文件描述符 1
# 错误输出需要添加文件描述符 2 才可以重定向到文件
$ ls 123 2> error
$ cat error
ls: 123: No such file or directory
# 将错误输出与标准输出共同写入到文件
$ (echo 123; ls 456) > error 2>&1
$ cat error
123
ls: 456: No such file or directory
以上都为清空写入模式,将输出重定向到一个新的文件,下面是追加写入模式的例子。
$ echo "add test 1" >> test
$ echo "add test 2" >> test
$ cat test
add test 1
add test 2
管道#
重定向的作用就是将命令与文件连接,Linux 还有一种功能将命令与命令连接,也就是把前一个命令的输出作为后一个命令的输入,以这种方式连接形成了 管道,管道符为 |
。
# 将第一个命令的标准输出作为第二个命令的标准输入
# {} 代表代码块
$ echo world | { read line; echo hello $line!; }
hello world!
管道执行的上下文控制
$ echo hello world | read x; echo $x
$ echo $x
通过这个方式无法直接输出变量 x,因为通过管道符连接 echo hello world | read x;
两个命令后,后者是通过子进程的方式运行的,执行完后就销毁,所以是打印不到变量 x 的。
- 通过代码块连接方式执行;
- 使用逻辑控制
while read
组合;
$ echo hello world | { read x; echo $x;}
hello world
$ echo hello world | while read x; do echo $x; done
hello world
作者:ABEELAN
出处:https://www.cnblogs.com/abeelan/p/17189195.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!