在本章中,我们将详细讨论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 -
$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)。
参考链接
https://www.learnfk.com/linux/linux-io-redirections.html
标签:输出,教程,users,文件,无涯,file,Linux,输入,重定向 From: https://blog.51cto.com/u_14033984/8572653