bash - 重定向与管道
问题描述
cat a.txt | wc
statement和 statement有什么区别wc < cat a.txt
。在这两种情况下,不是cat a.txt
被定向到的输出wc
吗?
解决方案
绝对不。在第二种情况下(wc < cat a.txt
),您正在调用命令wc a.txt
,同时将一个名为的文件连接cat
到进程的标准输入。
这可能看起来令人困惑,但大多数 shell 允许您将输入重定向到命令行中的任何位置。
wc a.txt < cat
将与(可以说更令人困惑)相同
wc < cat a.txt
要将命令的输出重定向到另一个命令的输入,请使用管道字符。要调用将文件作为标准输入的命令,请使用 V 形。
现在,现代 shell 将允许您键入如下命令:
wc <(cat a.txt)
这称为进程替换,与您询问的两种方法中的任何一种都不完全相同。在这种情况下,shell 将调用该进程cat a.txt
并在文件描述符中“捕获”其输出。然后,shell 将调用“main”命令 (wc) 并将对该文件描述符的引用作为参数传递,就好像它是文件名一样。它使需要简单文件名的命令能够读取临时命令的输出。
推荐阅读
- c# - System.Data.OleDb.OleDbException:“找不到可安装的 ISAM。” - MS Access (.accdb) 和 C# (.Net Framework)
- asp.net-core - 如何在 .Net Core 中创建无 Cookie 会话?
- javascript - 赛普拉斯:点击提交按钮(表单)重定向到另一个页面(baseurl)
- oracle - 使用Oracle的子串时有多个Matches?
- c# - 如何在 C# 中使用 OpenXml 在 excel 上完成边框?
- crystal-reports - 下载报告作为 Power Point
- amazon-web-services - 如何增加磁盘空间 GitLab Runner
- java - nextPacket 函数无法读取 pcap 文件 [jnetpcap]
- java - Java jar 不能正确显示 UTF-8 字符
- jquery - 剑道窗口关闭动作事件不解除绑定jquery