shell重定向
创始人
2024-06-02 13:52:00
0

第10章 输入/输出重定向

10.1 重定向介绍

大多数 UNIX系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。

重定向命令列表如下

命令说明
command > file将输出重定向到 file
command < file将输入重定向到 file
command >> file将输出以追加的方式重定向到 file
n > file将文件描述符为 n 的文件重定向到 file
n >> file将文件描述符为 n 的文件以追加的方式重定向到 file
n >& m将输出文件 m 和 n 合并
n <& m将输入文件 m 和 n 合并
<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入

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

10.2 输出重定向

重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示:

command1 > file1

上面这个命令执行command1然后将输出的内容存入file1。

注意:任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。

实例

1)执行下面的 who 命令,它将命令的完整的输出重定向在用户文件中(users):

$ who > users

执行后,并没有在终端输出信息,这是因为输出已被从默认的标准输出设备(终端)重定向到指定的文件。

你可以使用 cat 命令查看文件内容:

$ cat users
_mbsetupuser console  Oct 31 17:35 
tianqixin    console  Oct 31 17:35 
tianqixin    ttys000  Dec  1 11:33 

2)输出重定向会覆盖文件内容,请看下面的例子:

$ echo "你好!!!" > users
$ cat users
你好!!
$

3)如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾,例如:

$ echo "你好!!" >> users
$ cat users
你好!!
你好!!
$

10.3 输入重定向

和输出重定向一样,Unix 命令也可以从文件获取输入,语法为:

command1 < file1

这样,本来需要从键盘获取输入的命令会转移到文件读取内容。

注意:输出重定向是大于号(>),输入重定向是小于号(<)。

实例

1)接着以上实例,我们需要统计 users 文件的行数,执行以下命令:

$ wc -l users2 users

2)也可以将输入重定向到 users 文件:

$  wc -l < users2 

注意:上面两个例子的结果不同:第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容。

3)同时替换输入和输出,执行command1,从文件infile读取内容,然后将输出写入到outfile中。

command1 < infile > outfile

10.4 重定向深入讲解

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。

如果希望 stderr 重定向到 file,可以这样写:

$ command 2>file

如果希望 stderr 追加到 file 文件末尾,可以这样写:

$ command 2>>file

2 表示标准错误文件(stderr)。

如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:

$ command > file 2>&1

或者

$ command >> file 2>&1

如果希望对 stdin 和 stdout 都重定向,可以这样写:

$ command < file1 >file2

command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。

10.5 Here Document

Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。

它的基本的形式如下:

command << delimiterdocument
delimiter

它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。

注意

  • 结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。
  • 开始的delimiter前后的空格会被忽略掉。

实例

1)在命令行中通过 wc -l 命令计算 Here Document 的行数:

$ wc -l << EOF欢迎光临
EOF
2          # 输出结果为 2 行
$

2)我们也可以将 Here Document 用在脚本中,例如:

#!/bin/bashcat << EOF
欢迎
光临
EOF

执行以上脚本,输出结果:

欢迎
光临

10.6 /dev/null 文件

/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

$ command > /dev/null

如果希望屏蔽 stdout 和 stderr,可以这样写:

$ command > /dev/null 2>&1

注意

  • 0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

  • 这里的 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出。

相关内容

热门资讯

奇怪的人初中作文【通用3篇】 奇怪的人初中作文 篇一奇怪的人初中作文我认识一个非常奇怪的人,他叫小明。小明总是穿着一身怪异的衣服,...
枫泾状元糕-特产作文800字... 枫泾状元糕-特产作文800字_初一状物作文 篇一枫泾状元糕是上海嘉定区枫泾镇的特产之一,是一种以糯米...
梦想初中作文【优选6篇】 梦想初中作文 篇一我心中的梦想初中初中,是一个人成长的关键时期,也是一个人对未来有着更多期待和憧憬的...
初中生活三部曲作文(优秀3篇... 初中生活三部曲作文 篇一:初中生活的欢笑与泪水初中生活是每个人成长道路上的重要一步。它是一个充满欢笑...
暑假难忘的一天作文初一【精简... 暑假难忘的一天作文初一 篇一初一暑假的一天,我和我的家人一起去了一趟乡村旅游。这一天的经历让我难以忘...
五年级作文读俗世奇人后感【优... 五年级作文读俗世奇人后感 篇一近日,我读了一本名为《俗世奇人》的书,它给了我很多思考和启发。这本书主...
提醒初一作文【通用6篇】 提醒初一作文 篇一:如何提高初一作文水平初一是学生们开始接触作文的重要阶段,作文能力的培养对于学习语...
生命是一树花开初中作文【优选... 生命是一树花开初中作文 篇一生命是一树花开生命是一树花开,绽放出美丽和希望。在这个世界上,每个人都有...
旅行难忘的作文300字五年级... 旅行难忘的作文300字五年级 篇一我难忘的旅行去年暑假,我和家人一起去了南京旅行。这是我人生中第一次...
假如我回到了清朝五年级作文【... 假如我回到了清朝五年级作文 篇一假如我回到了清朝五年级,我将会过上怎样的生活呢?清朝是一个封建社会,...
骄傲的感觉真好作文五年级(经... 骄傲的感觉真好作文五年级 篇一骄傲的感觉真好我是一个五年级的学生,今天我想和大家分享一下我为什么觉得...
新的一切,新的梦想作文【通用... 新的一切,新的梦想作文 篇一新的一切,新的梦想人生中,总会有一些时刻让我们感觉到新的一切即将开始,新...
三毛流浪记五年级作文(推荐3... 三毛流浪记五年级作文 篇一我眼中的三毛流浪记小时候,我读过一本叫做《三毛流浪记》的书。这本书讲述了一...
奇遇外星人五年级作文(最新3... 奇遇外星人五年级作文 篇一我与外星人的友谊今天,我要向大家分享一个令人难以置信的故事,那就是我和一位...
愉快假期作文五年级35篇【优... 愉快假期作文五年级35篇 篇一我度过的愉快假期假期终于来临了,我迫不及待地踏上了愉快的假期之旅。这个...
我的奶奶五年级作文500字【... 篇一:我的奶奶五年级作文500字我的奶奶是我最亲近的人之一,她是一位和蔼可亲的老人,也是我心目中的英...
第一次走夜路五年级作文【推荐... 第一次走夜路五年级作文 篇一第一次走夜路昨天晚上,我第一次独自走夜路回家。这是一个令人紧张又刺激的经...
五年级上册语文作文(精彩3篇... 五年级上册语文作文 篇一我最喜欢的动物我最喜欢的动物是熊猫。熊猫是中国的国宝,也是世界上最可爱的动物...
创新想象作文五年级400字2... 创新想象作文五年级400字26篇 篇一标题:未来的交通工具未来,交通工具将发生翻天覆地的变化。现在我...
五年级关于去肯德基作文大全【... 五年级关于去肯德基作文大全 篇一第一篇内容:我对肯德基的喜爱作为一个五年级的学生,我非常喜欢去肯德基...