聊聊Linux的重定向符

有过一段时间 Linux 使用经历的人都知道,Linux 中的重定向符有输出重定向符(>,>>)输入重定向符(<,<<)

输出重定向符可以把执行命令原本显示在屏幕上的内容写入到指定的文件中,如:

root@33e53512c13d ~                                                                                          [19:39:44]
> # echo 123 > a

root@33e53512c13d ~                                                                                          [19:40:18]
> # cat a
123

> 与 >> 的区别在于,> 是覆盖写入文件,而 >> 是在文件末尾接着写。

root@33e53512c13d ~                                                                                          [19:39:44]
> # echo 123 > a

root@33e53512c13d ~                                                                                          [19:40:18]
> # cat a
123

root@33e53512c13d ~                                                                                          [19:40:24]
> # echo 456 > a

root@33e53512c13d ~                                                                                          [19:42:25]
> # cat a
456

root@33e53512c13d ~                                                                                          [19:42:27]
> # echo 789 >> a

root@33e53512c13d ~                                                                                          [19:42:35]
> # cat a
456
789

 

输入重定向符是将文件内容重定向到命令,如:

root@33e53512c13d ~                                                                                          [19:42:35]
> # cat a
456
789

root@33e53512c13d ~                                                                                          [19:42:37]
> # wc < a
2 2 8

而输入重定向符对应的  << 称为内联输入重定向符,这种方法无需使用文件进行重定向,只需要在命令行中指定用于输入重定向的数据就可以了。

内联输入重定向符号是远小于号( <<)。除了这个符号,你必须指定一个文本标记来划分输入数据的开始和结尾。任何字符串都可作为文本标记,但在数据的开始和结尾文本标记必须一致。

root@33e53512c13d ~                                                                                          [19:45:45]
> # wc << a
heredoc> 1 2 3
heredoc> 4 5 6
heredoc> a
 2  6 12

至此,Linux 的重定向符就基本介绍完了,很简单,一看就会。但是你真的就会了吗?给两个题目,如果你都能回答上来,就关了这个页面吧。

1.下面的命令输出什么?

root@33e53512c13d ~                                                                                          [19:56:05]
> # >>t >>t echo 123

root@33e53512c13d ~                                                                                          [19:57:18]
> # cat t

2.这个命令又输出什么?

root@33e53512c13d ~                                                                                          [19:59:00]
> # echo 123 >a

root@33e53512c13d ~                                                                                          [19:59:10]
> # cat a
123

root@33e53512c13d ~                                                                                          [19:59:11]
> # <a wc

乍一看,这个两个命令好像不大对啊,因为我们在学重定向符的时候,都会产生一种错觉:重定向符是“双目的”。然而事实上,重定向符类似无缓存的 channel ,一个重定向符 “声明” 一个 channel ,因此问题 1 中 “>>t >>t echo 123” 存在两个 channel。输入 channel 的“源头”是“无限”的,比如问题 1 中的  "echo 123" 可以认为是源源不断地输出 123 。源源不断的 123 通过两个 channel 输入到 t中,那么问题 1 的输出结果是:

root@33e53512c13d ~                                                                                          [19:57:18]
> # cat t
123
123

问题2的输出为:

root@33e53512c13d ~                                                                                          [19:59:11]
> # <a wc
1 1 4

并且,输出重定向符只有一个源头(输出内容的命令),输入重定向符只有一个尽头(输入内容的命令)。重定向符是从左到右开启 “channel” 的,如:

root@33e53512c13d ~                                                                                          [20:16:18]
> # >> t echo bbb > t

root@33e53512c13d ~                                                                                          [20:18:58]
> # cat t
bbb

root@33e53512c13d ~                                                                                          [20:19:02]
> # > s echo bbb >> s

root@33e53512c13d ~                                                                                          [20:19:17]
> # cat s
bbb
bbb

 

关于Linux命令的学习有本书推荐:Linux命令行与shell脚本编程大全第3版

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值