📜  Linux 中的输入输出重定向

📅  最后修改于: 2022-05-13 01:57:29.623000             🧑  作者: Mango

Linux 中的输入输出重定向

任何命令的工作要么是接受输入,要么是给出输出,或者两者兼而有之。因此,Linux 有一些命令或特殊字符来重定向这些输入和输出功能。例如:假设我们想运行一个名为“date”的命令,如果我们运行它会将输出打印到当前终端屏幕。但是我们的需求不同,我们不希望输出显示在终端上。我们希望将输出保存在一个文件中。这可以通过输出重定向很容易地完成。这里的重定向只是意味着转移输出或输入。

同样,如果我们有一个需要执行输入的命令。让我们使用一个命令“head”,它需要输入来给出输出。因此,我们要么直接以命令的形式写入输入,要么从任何其他地方或文件重定向输入。假设我们有一个名为“file.txt”的文件来打印文件的起始行,我们可以使用“head”。那么让我们看看这一切是如何在终端上完成的。

重定向类型

1.覆盖

  • “>”标准输出
  • “<”标准输入

2. 附加



  • “>>”标准输出
  • “<<”标准输入

3. 合并

  • “p >& q” 将流 p 的输出与流 q 合并
  • “p <& q” 将来自流 p 的输入与流 q 合并

实现:所以不管你在运行这个命令后要写什么,都会被重定向并复制到“file.txt”。这是标准输出重定向。

cat > file.txt

Linux 中的输入和输出重定向

现在,这是标准的输入重定向,cat 命令将从“file.txt”中获取输入并将其打印到终端屏幕。这行代码还显示了 cat 命令复制和粘贴的实际工作和含义。很多人有一个误解,认为猫是用来创建文件的,其实不然,猫的主要工作是复制输入,将输出交给屏幕。

cat < file.txt

让我们看一个例子来了解 cat 命令的实际工作



cat

只需在终端上输入cat并按回车键即可。它将要求输入行,您可以写下您的姓名并按回车键。您将看到您的输入将被重新打印。

(base) [root@localhost ~]# cat
Hello this is GeeksForGeeks
Hello this is GeeksForGeeks

Cat-command-in-Linux-IO-Redirection-Example

当我们想要将一些行附加到文件的现有内容时使用。如果您只使用一个尖括号,则文件的所有内容都将丢失。

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 ”。