Lea*_*ess 4 bash shell redirect
重定向用于重定向stdout/stdin/stderr!前任:ls > log.txt.
管道用于将命令的输出作为另一个命令的输入。前任: ls | grep file.txt
为什么这两个运营商做同样的事情?
为什么不直接写ls > grep来传递输出,这不也是一种重定向吗?
我意识到 Linux 是“做一件事并把它做好”,所以我错过了更多合乎逻辑的原因。
您确实需要一个差异化的语法功能 - 使用>vs.|就可以了。
如果>在这两种情况下都使用,你怎么知道是否
ls > grep
Run Code Online (Sandbox Code Playgroud)
正在尝试写入名为的文件grep或向grep 命令发送输入?
grep可能不是最好的例子,因为您可能会试图通过grep's 强制参数的存在来消除歧义;但是,(可选)确实存在无参数命令,例如column.
另一个人在评论中提供了另一个示例:test可能指的是测试输出文件或标准test 命令的无参数调用。
另一种看待它的方式:
您的建议基本上是>用作通用的发送输出某处运算符,而不管目标的类型(文件与命令)。
但是,这只会转移消歧的需要,然后您必须在指定目标时消歧- 它是要输出到的文件还是要运行的命令?
鉴于 shell在涉及简单命令的第一个标记时也具有隐式消歧功能-只调用一个命令- 在操作员级别区分-用于输出到文件,用于发送到命令 - 是明智的选择.foo [...]>|