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
&> 则代表了将标准输出和标准错误输出都重定向到指定位置。
posted @   时间在哪  阅读(349)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示