无论是程序要处理的数据,还是控制脚本的简单命令,输入输出缺一不可。程序要做的第一件事就是像阴阳一样处理“输入和输出”。1.从文件中获取输入当我们想将内容输出到文件中时,可以使用符号>或>>来实现。代表输入重定向的符号<可以用来从文件中读取数据,如下所示:$wc符号告诉shell将输出重定向到文件中,例如:$echofillitupfillitup$echofillitup>file.txt让我们检查文件file.txt的内容,看看它是否包含命令的输出:$catfile.txtfillitupTheecho示例第一部分第一行中出现的命令包含3个要输出的参数。第二行使用>将这些输出保存到文件file.txt,这就是您看不到echo输出的原因。示例的第二部分使用cat命令显示文件内容。我们可以看到该文件准确地包含了echo应该输出的内容。cat命令的名称来自一个较长的单词连接。此命令将出现在命令行上的文件的输出连接在一起,如果您键入catfile1file2file3,这些文件的内容将一个一个地发送到终端窗口。如果一个大文件被分成两半,您也可以通过简单地将输出保存到另一个文件来将其cat回来(即,将两半连接起来):catfirst.halfsecond.half>mergeFile.txt5。将输出保存到其他文件如果要使用重定向将输出保存到当前目录以外的位置,在重定向输出时添加路径,如下:echosomemoredata>/tmp/echo.out或:echosomemoredata>../../over.here出现在重定向符号(>)之后的文件名实际上是路径名。如果没有符合条件的部分,则该文件将放置在当前目录中。如果文件名以斜杠(/)开头并且是绝对路径名,那么文件将被放置在文件系统层次结构(目录树)中从根目录开始的指定位置。在第二个例子中,我们在这里使用了相对路径名../../over.,其中..是一个特殊的目录,指向存在于每个目录中的父目录。6.将输出和错误消息发送到不同的文件。您想要获得程序的输出,但不希望输出被出现的错误消息搞乱。要保存的错误信息混杂在程序输出中,不易查找。您可以将输出和错误消息重定向到不同的文件,如下所示:$myprogram1>messages.out2>message.err或使用更常用的方法:$myprogram>messages.out2>message.errshell创建两个输出文件。第一个是messages.out,程序myprogram的所有输出都重定向到它。第二个是message.err,程序myprogram的所有错误消息都重定向到它。1>和2>中,数字代表文件描述符。1代表标准输出(STDOUT),2代表标准错误(STDERR)。0代表标准输入(STDIN)。如果未指定数字,则假定为STDOUT。7.将输出和错误消息发送到同一个文件使用重定向,我们可以将输出或错误消息保存到不同的文件,但是如何将两者发送到同一个文件呢?使用shell语法将标准错误消息重定向到与标准输出相同的位置。首选:$myprogram>&outfile或:$myprogram&>outfile或者老式且稍微麻烦的写作方式:$myprogram>outfile2>&1其中myprogram是将生成输出到STDERR和STDOUT的程序。&>和>&只是将STDOUT和STDERR发送到同一位置的简写。8.追加输出每次重定向输出时,都会生成一个新的输出文件。如果你想在不破坏之前的输出的情况下将输出重定向两次(或三次,四次......)怎么办?在bash的重定向符号中,双大于号(>>)表示追加输出:$ls>/tmp/ls.out$cd../elsewhere$ls>>/tmp/ls.out$cd../anotherdir$ls>>/tmp/ls.out如果存在同名文件,第一行的重定向将截断它并将ls命令的输出保存在这个空文件中。对ls的最后两次调用使用双大于号(>>)附加到输出文件而不是覆盖它。如果你想同时重定向错误信息(STDERR),你可以把STDERR的重定向放在它后面,像这样:ls>>/tmp/ls.out2>&1在bash4中,你可以把这两个redirections方向合二为一:$ls&>>/tmp/ls.out该命令重定向STDERR和STDOUT并将它们附加到指定文件。&符号必须在前面并且这3个字符之间不能有空格9.丢弃输出有时您不想将输出保存到文件中,或者有时您甚至不想看到输出。例如,当我们在查找文件时,忽略那些未经许可的提示,如下图:此时,我们可以将输出重定向到/dev/null,如下所示:$find/-namemyfile2>/dev/null实际上,您可以将不需要的输出重定向到一个文件,然后再将其删除。但是有一个更简单的方法。Unix和Linux系统都有一个特殊的设备,它不是真正的硬件,而只是一个我们可以将不需要的数据放入其中的小桶。它是/dev/null,非常适合这种情况。写入其中的数据被简单地丢弃并且不占用磁盘空间,重定向使这变得容易。在这个例子中,只有发送到标准错误的输出被丢弃。如果本文对您有帮助,请关注并点赞;有什么建议也可以留言或私信。您的支持是我坚持创作的动力。转载请注明出处!