我知道>(右 V 形)用于将程序的 STDOUT 重定向到文件,因为将创建一个名为with作为内容的echo 'polo' > marco.txt文本文件,而不是将其写入终端输出。我还了解它和 (pipe) 之间的区别,它用于将 STDOUT 从管道左侧的第一个命令重定向到管道右侧的第二个命令的 STDIN,如所示看法。marco.txtpolo|echo 'Hello world' | lessHello worldless

我只是真的不明白它是如何<工作的。我尝试了一下marco.txt < echo 'polo',bash 给了我一个错误:-bash: echo: No such file or directory。有人可以解释它是如何工作的以及我为什么要使用它吗?

答案1

运算符 < 最常用于重定向文件内容。例如

grep "something" < /path/to/input.file > /path/to/output.file 

这将 grep input.file 的内容,将包含“something”的行输出到 output.file

它不是 > 运算符的完整“逆”运算符,但对于文件来说它具有有限的意义。

对于一个非常好的和简短的描述,以及<的其他应用程序<参见 IO重定向

更新:在评论中回答您的问题是如何使用 < 运算符在 bash 中使用文件描述符:

您可以将 stdin (0)、stdout (1) 和 stderr (2) 之外的其他输入和/或输出添加到 bash 环境,这有时比不断切换重定向输出的位置更方便。 bash 中 3 个“std”输入/输出旁边的 () 中的 # 是它们的“文件描述符”,尽管它们在 bash 中很少以这种方式引用 - 在 C 中更常见,但即便如此,也定义了常量它从这些数字中抽象出一些东西,例如 STDOUT_FILENO 在 unistd.h 或 stdlib.h 中定义为 1...

假设您有一个脚本已经使用 stdin 和 stdout 与用户终端进行交互。然后,您可以打开其他文件进行读取、写入或两者兼而有之,而不会影响 stdin / stdout 流。这是一个简单的例子;基本上与上面 tldp.org 链接中的材料类型相同。

#!/bin/bash -
#open a file for reading, assign it FD 3
exec 3</path/to/input.file
#open another file for writing, assign it FD 4
exec 4>/path/to/output.file
#and a third, for reading and writing, with FD 6 (it's not recommended to use FD 5)
exec 6<>/path/to/inputoutput.file

#Now we can read stuff in from 3 places - FD 0 - stdin; FD 3; input.file and FD 6, inputoutput.file
# and write to 4 streams - stdout, FD 1, stderr, FD 2, output.file, FD 4 and inputoutput.file, FD 6

# search for "something" in file 3 and put the number found in file 4
grep -c "something" <&3 >&4

# count the number of times "thisword" is in file 6, and append that number to file 6
grep -c "thisword" <&6 >>&6

# redirect stderr to file 3 for rest of script
exec 2>>&3

#close the files
3<&-
4<&-
6<&-
# also - there was no use of cat in this example. I'm now a UUOC convert.

我希望它现在更有意义了——你真的必须稍微尝试一下它才能下沉。只要记住 POSIX 口头禅——一切皆文件。因此,当人们说 < 实际上只适用于文件时,这并不是限制 Linux / Unix 中的问题;而是限制了 Linux / Unix 中的问题。如果某些东西不是文件,您可以轻松地使其外观和行为像文件一样。

答案2

它将 after 的文件重定向<到 before 程序的标准输入<

foo < bar

foo将使用该文件作为其标准输入来运行程序bar

相关内容