Linux - 重定向

Linux - 重定向 首页 / Linux入门教程 / Linux - 重定向

在本章中,我们将详细讨论Shell I/O 重定向。大多数Unix系统命令从您的终端获取输入,并将输出发送回您的终端输出。

输出重定向

符号 >file 命令将输出输出到指定的 file中,如检查以下 who 命令,该命令将输出重定向用户文件中。

$who > users

请注意,终端上没有输出。这是因为输出已从默认的标准输出设备(终端)重定向到指定的文件。您可以检查用户文件的完整内容-

$cat users
oko         tty01   Sep 12 07:30
ai          tty15   Sep 12 13:32
ruth        tty21   Sep 12 10:10
pat         tty24   Sep 12 13:07
leanrfk     tty25   Sep 12 13:03
$

如果命令的输出重定向到文件,并且该文件已经包含一些数据,则该数据将丢失。考虑以下示例-

$echo line 1 > users
$cat users
line 1
$

您可以使用>>运算符将输出内容追加到现有文件中,如下所示:

$echo line 2 >> users
$cat users
line 1
line 2
$

输入重定向

就像命令的输出可以重定向到文件一样,命令的输入也可以从文件重定向。 由于大于符号>用于输出重定向,小于字符<用于重定向命令的输入。

如,要计算上面生成的文件 users 中的行数,可以执行以下命令-

$wc -l users
2 users
$

执行后,您将收到以下输出。您可以通过从文件用户重定向 wc 命令的标准输入来计算文件中的行数-

$wc -l < users
2
$

Here Document

Here文档用于将输入重定向到交互式Shell脚本或程序中,一般格式为-

command << delimiter
document
delimiter

在这里,Shell将<<操作符解释为读取输入的指令,直到找到包含指定定界符的行。 然后,直到包含定界符的行的所有输入行都被输送到命令的标准输入中。

以下是命令 wc -l 的输入,以计算总行数-

$wc -l << EOF
   This is a learnfk study website 
	for good (and bad) restaurants
	in Cape Town.
EOF
3
$

您可以使用Here文档使用脚本来打印多行,如下所示-

#!/bin/sh

cat << EOF
This is a learnfk study website
for good (and bad) restaurants
in Cape Town.
EOF	

执行后,您将收到以下输出-

This is a learnfk study website
for good (and bad) restaurants
in Cape Town.

以下脚本使用 vi 文本编辑器运行会话,并将输入内容保存在文件 test.txt 中。

#!/bin/sh

filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands

如果使用vim作为vi来运行此脚本,则可能会看到类似以下的输出-

$sh test.sh
Vim: Warning: Input is not from a terminal
$

运行脚本后,您应该看到以下内容已添加到文件 test.txt 中-

$cat test.txt
This file was created automatically from
a shell script
$

忽视输出

有时您需要执行命令,但是您不希望输出显示在屏幕上。在这种情况下,可以通过将输出重定向到文件/dev/null 来丢弃输出-

$command > /dev/null

命令是您要执行的命令的名称。文件/dev/null 是一个特殊文件,会自动丢弃其所有输入。

要丢弃命令的输出及其错误输出,请使用标准重定向将 STDERR 重定向到 STDOUT -

链接:https://www.learnfk.comhttps://www.learnfk.com/linux/linux-io-redirections.html

来源:LearnFk无涯教程网

$command > /dev/null 2>&1

这里的 2 代表 STDERR ,而 1 代表 STDOUT 。您可以通过将STDOUT重定向到STDERR来在STDERR上显示消息,如下所示:

$echo message 1>&2

重定向命令

以下是可用于重定向的命令的完整列表-

Sr.No.Command & 描述
1

pgm > file

pgm的输出重定向到文件

2

pgm < file

pgm从文件读取其输入

3

pgm >> file

pgm的输出附加到文件

4

n > file

具有描述符 n 的流的输出重定向到文件

5

n >> file

描述符 n 附加到文件

6

n >& m 

将流 n 的输出与流 m 合并

7

n <& m

 将流 n 的输入与流 m 的输入合并

8

<< tag

标准输入Here文档通过行开头的下一个标签

9

|

从一个程序或过程获取输出,并将其发送到另一个

请注意,文件描述符 0 通常是标准输入(STDIN), 1 是标准输出(STDOUT),而 2 是标准错误输出( STDERR)。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

人工智能基础课 -〔王天一〕

技术领导力实战笔记 -〔TGO鲲鹏会〕

零基础学Python -〔尹会生〕

罗剑锋的C++实战笔记 -〔罗剑锋〕

分布式系统案例课 -〔杨波〕

大厂晋升指南 -〔李运华〕

Serverless进阶实战课 -〔静远〕

B端体验设计入门课 -〔林远宏(汤圆)〕

程序员职业规划手册 -〔雪梅〕

好记忆不如烂笔头。留下您的足迹吧 :)