开发者社区> 问答> 正文

Linux:关于标准输出的疑问?

创建文件xxxx,文件内容为字符串"Hello World"

[root@localhost ~]# cat xxxx // 从文件获取标准输入
Hello World
[root@localhost ~]# cat < xxxx // 从文件获取标准输入
Hello World
[root@localhost ~]# cat // 发生阻塞,从键盘获取标准输入
Hello World
Hello World
但为什么使用tee时会阻塞呢?

[root@localhost ~]# tee xxxx // 发生阻塞
[root@localhost home]# tee < xxxx // 从文件获取标准输入
Hello World
1、cat xxxx、cat < xxxx两种方式有什么区别吗?

2、预期效果是将xxxx的内容作为标准输入传给tee,再通过标准输出显示出来,但却发生了阻塞,通过man cat、man tee没看出为什么会产生这样的差别。

cat:连接stdin内容输出到stdout
tee:读取stdin内容输出到stdout
两个小疑惑:)

展开
收起
a123456678 2016-06-27 11:31:29 1893 0
1 条回答
写回答
取消 提交回答
  • 你对tee xxxx的理解

    预期效果是将xxxx的内容作为标准输入传给tee,再通过标准输出显示出来
    是错误的

    cat xxxx 是cat程序自身读取xxxx文件,输出到stdout,这个过程跟stdin没有一点关系
    cat < xxxx cat命令没加任何参数,此时cat会读取stdin,而此时shell通过<符号将stdin重定向到文件xxxx,相当于cat间接读取了xxxx,但是cat并不能感知到xxxx文件的存在

    tee xxxx 是tee读取stdin,输出到stdout以及xxxx文件, 这一点跟cat是有区别的

    而你查到的命令解释太笼统了

    cat是读取stdin或者用参数指定的文件(一个或者多个),并输出到stdout
    tee是读取stdin,并输出到stdout以及用参数指定的文件(零个、一个或者多个)
    单独使用不加参数的cat或者tee,可以认为没有区别

    2019-07-17 19:47:27
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载