台式电脑

电脑输入输出怎么样分开(重定向输入和输出)

重定向输入和输出

shell控制它运行的命令的输入和输出,管道就是其中一个例子,它将一个命令的stdout定向到另一个命令的stdin。管道语法(|)是shell的一个功能。

另一个shell功能是将标准输出重定向到文件。例如,下面grep命令的输出默认写到stdout:

$grepPerlanimals.txtalpacaIntermediatePerl2012Schwartz,Randal

可以改用称为输出重定向的shell功能将该输出发送到文件,添加符号>后跟文件名即可:

$grepPerlanimals.txt>outfile$catoutfilealpacaIntermediatePerl2012Schwartz,Randal

如果输出文件不存在,则会创建该文件。如果文件已存在,重定向将覆盖文件内容。如果希望追加到输出文件而不是覆盖,改用符号>>:

$grepPerlanimals.txt>outfile$echoTherewasjustonematch>>outfile$catoutfilealpacaIntermediatePerl2012Schwartz,RandalTherewasjustonematch

类似的,输入也支持重定向,它可以将stdin重定向到来自文件而不是键盘。使用符号< 后跟文件名重定向 stdin。许多接受文件名作为参数并从这些文件读取的 Linux 命令,在没有参数的情况下运行时也会从 stdin 读取。例如,用于计算文件中的行、单词和字符的 wc:

$wcanimals.txt751325animals.txt$wc< animals.txt7 51 325

了解这两个wc命令在行为上有何不同非常重要:

·在第一个命令中,wc接收文件名animals.txt作为参数,因此wc知道该文件存在,wc打开磁盘上的文件并读取其内容。

·在第二个命令中,wc被调用时没有参数,因此它从stdin(通常是键盘)读取。然而,shell偷偷地将stdin重定向到来自animals.txt文件的内容。wc不知道animals.txt文件存在。

shell可以在同一命令中重定向输入和输出:

$wc< animals.txt >count$catcount751325

甚至可以同时使用管道。在这里,grep从重定向的stdin读取并将结果通过管道传输到wc,wc写入重定向的stdout,生成文件计数:

$grepPerl< animals.txt | wc >count$catcount1647标准错误(stderr)和重定向

在日常Linux使用中,你可能会注意到某些输出(例如某些错误消息)无法通过>重定向。例如要求cp复制一个不存在的文件,它会产生以下错误消息:

$cpnonexistent.txtfile.txtcp:cannotstat'nonexistent.txt':Nosuchfileordirectory

如果将该cp命令的输出重定向到文件,错误消息仍会显示在屏幕上:

$cpnonexistent.txtfile.txt>errorscp:cannotstat'nonexistent.txt':Nosuchfileordirectory

并且errors文件内容为空。

为什么会这样?Linux命令可以生成多个输出流。除了stdout之外,还有stderr(标准错误),这是传统上为错误消息保留的第二个输出流。stderr和stdout在显示屏上看起来相同,但在内部它们是分开的。可以使用符号2>后跟文件名重定向stderr:

$cpnonexistent.txtfile.txt2>errors$caterrorscp:cannotstat'nonexistent.txt':Nosuchfileordirectory

电脑输入输出怎么样分开(重定向输入和输出)

将stderr追加到一个文件中,使用2>>:

$cpnonexistent.txtfile.txt2>errors$cpanother.txtfile.txt2>>errors$caterrorscp:cannotstat'nonexistent.txt':Nosuchfileordirectorycp:cannotstat'another.txt':Nosuchfileordirectory

要将stdout和stderr重定向到同一个文件,使用&>:

$echoThisfileexists>goodfile.txt$catgoodfile.txtnonexistent.txt&>all.output$catall.outputThisfileexistscat:nonexistent.txt:Nosuchfileordirectory

相关新闻

返回顶部