Shell脚本--重定向
0. 从终端输入一个命令时,通常会将该命令的结果输出到终端。
例如,在终端执行 pwd 命令会在屏幕上显示当前目录:
# pwd
/root
大多数 UNIX 系统中,命令通常从一个叫标准输入的地方读取输入。同样,命令通常将其输出写入到标准输出。标准输入和标准输出默认情况下都是终端。
那如果想要更改命令的标准输入和标准输出的地方,就需要使用重定向了。
1. 关于重定向涉及到几个命令:
输出重定向: > 将标准输出重定向到指定位置 >> 将标准输出以追加的方式重定向到指定位置 输入重定向: < 将标准输入重定向到指定位置,即从指定位置输入 << tag 将标准输入重定向到指定内容,即将开始标记 tag 和结束标记 tag 之间的内容作为标准输入
下面用示例说明:
a.>
# echo ---- > output # cat output ---- # echo ++++ > output # cat output ++++
将命令执行的结果用 > 重定向到指定文件时,每次新的命令执行结果都会覆盖文件中的内容。
b.>>
# echo ---- > output # cat output ---- # echo ++++ >> output # cat output ---- ++++
将命令执行的结果用 >> 重定向到指定文件时,每次新的命令执行结果都会追加到文件内容的最后。
c.<
# cat output ---- ++++ # wc -l output 2 output # wc -l < output 2
两次执行 wc 的区别在于:第一次是将output作为文件统计文件的内容行数;第二次是将output看做标准输入,从output中读入内容,然后计算输入内容的行数。
d.<< tag
# wc -l << tag > 1 > 2 > 3 > tag 3
使用 << tag 时,tag需要成对出现,第一个 tag 表示输入开始,第二个 tag 表示输入结束(tag 可以使用任意字符串)。然后将这段内容作为标准输入。
2. 除上述情况外,还能看到以下情形:
2> 2>& 1 1>& 2 &>
在介绍上述情况之前先了解下什么是标准输入和标准输出。
通常用文件描述符0表示标准输入(STDIN),文件描述符1表示标准输出(STDOUT),文件描述符2表示标准错误输出(STDERR)。
而我们常见的 > 其实和 1> 相同,都是代表了将标准输出重定向。
那么 2> 就代表了将标准错误输出重定向,举例说明:
# ld ld: no input files # ld > true 2> error # cat true # cat error ld: no input files
ld 命令 是需要输入参数的,因为没有输入参数,所以报错。默认情况下是会将标准错误输出输出到终端。在示例中将标准输出和标准错误输出分别重定向至 true 文件和 error 文件。
接着看看 2>& 1:
# ld > true 2>& 1 # cat true ld: no input files
可以看到 2>&1 代表了将标准错误输出重定向至标准输出,也就是两者输出到同一个文件 true 中。
同理,1>&2 代表了将标准输出重定向至标准错误输出。
# echo ---- &> output # cat ouput ---- # ld &> output # cat output ld: no input files
&> 则代表了将标准输出和标准错误输出都重定向到指定位置。
分类:
Shell从入门到放弃
标签:
Shell
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)