Linux 中的输入输出重定向
任何命令的工作要么是接受输入,要么是给出输出,或者两者兼而有之。因此,Linux 有一些命令或特殊字符来重定向这些输入和输出功能。例如:假设我们想运行一个名为“date”的命令,如果我们运行它会将输出打印到当前终端屏幕。但是我们的需求不同,我们不希望输出显示在终端上。我们希望将输出保存在一个文件中。这可以通过输出重定向很容易地完成。这里的重定向只是意味着转移输出或输入。
同样,如果我们有一个需要执行输入的命令。让我们使用一个命令“head”,它需要输入来给出输出。因此,我们要么直接以命令的形式写入输入,要么从任何其他地方或文件重定向输入。假设我们有一个名为“file.txt”的文件来打印文件的起始行,我们可以使用“head”。那么让我们看看这一切是如何在终端上完成的。
重定向类型
1.覆盖
- “>”标准输出
- “<”标准输入
2. 附加
- “>>”标准输出
- “<<”标准输入
3. 合并
- “p >& q” 将流 p 的输出与流 q 合并
- “p <& q” 将来自流 p 的输入与流 q 合并
实现:所以不管你在运行这个命令后要写什么,都会被重定向并复制到“file.txt”。这是标准输出重定向。
cat > file.txt
现在,这是标准的输入重定向,cat 命令将从“file.txt”中获取输入并将其打印到终端屏幕。这行代码还显示了 cat 命令复制和粘贴的实际工作和含义。很多人有一个误解,认为猫是用来创建文件的,其实不然,猫的主要工作是复制输入,将输出交给屏幕。
cat < file.txt
让我们看一个例子来了解 cat 命令的实际工作
cat
只需在终端上输入cat并按回车键即可。它将要求输入行,您可以写下您的姓名并按回车键。您将看到您的输入将被重新打印。
(base) [root@localhost ~]# cat
Hello this is GeeksForGeeks
Hello this is GeeksForGeeks
当我们想要将一些行附加到文件的现有内容时使用。如果您只使用一个尖括号,则文件的所有内容都将丢失。
cat >> file.txt
要查看附加标准输入的工作:
here-document用于将输入重定向到交互式 shell 脚本或程序。通过为交互式程序或交互式 shell 脚本提供所需的输入,您可以在没有用户操作的情况下运行 shell 脚本中的任何程序。
此处文档的一般形式是 -
Syntax:
command << delimiter
document
delimiter
(base) [root@localhost ~]# cat << helo.txt
> Hello This is
> GeeksForGeeks
helo.txt
Hello This is
GeeksForGeeks
(base) [root@localhost ~]#
Note: Here, helo.txt is a delimeter.
分隔符标记文档的结束点。没有它,shell 将永远读取输入。分隔符必须是不包含空格或制表符的单个单词。
错误重定向:错误重定向是将一些错误命令产生的错误传输到文件而不是 STDOUT。
每当在终端执行程序时,都会生成 3 个文件:标准输入 (0)、标准输出 (1)、标准错误 (2)。每当程序运行时,总是会创建这些文件。默认情况下,屏幕上会显示错误流。
例子:
1.在下面提到的例子中,上面使用的文件描述符是2(STDERR) 。使用“ 2> ”将错误输出重定向到名为“error.txt”的文件, STDOUT上不显示任何内容。
$ somerandomcommand 2>error.txt
2.这里, 2>&1表示STDERR重定向到STDOUT的目标。更正式地说,“ 2 ”生成的错误消息与当前输出“ 1 ”合并。
$ ls GEEK GFG > error.txt 2>&1
在上面的示例中,目录GEEK不存在。错误输出与标准输出合并,标准输出又被重定向到“ error.txt ”。