By default,most systems have their standard output set to the console,where text messages are shown,although this can generally be redirected.
我从来没有听说过一个系统,其中stdout不是控制台窗口,默认情况下或其他方式.我可以看到如何重定向它在打印是一项昂贵的操作的系统中可能是有益的,但这在现代计算机中应该不是问题,对吧?
解决方法
例如(在Unix上):
./appname > output
将stdout从appname重定向到名为output的文件.
./appname 2> errors > output
将stdout重定向到名为output的文件,将stderr中的所有错误重定向到名为errors的文件.
在unix系统上,您还可以让程序打开文件描述符并将其指向stdin,例如:
echo "input" > input cat input | ./appname
这将导致程序从管道中读取stdin.
这就是在unix中你可以将各种不同的实用程序“管道”在一起以创建一个更大的工具.
find . -type f | ./appname | grep -iv "search"
这将运行find命令,并将其输出并将其输入到./appname,然后appname的输出将被发送到grep的输入,然后搜索单词“search”,只显示匹配的结果.
它允许许多小型实用程序具有非常强大的效果.
想想>,<和|像管道. >就像水槽中的排水管一样,它接受数据并将其存储在您想要放置的位置.当shell遇到>它会打开一个文件.
> file
当shell看到上述内容时,它将使用标准系统调用打开文件,并记住该文件描述符.在上述情况下,由于没有输入,它将创建一个空文件,并允许您键入更多命令.
banner Hello
这个命令用非常大的字母将Hello写入控制台,并使其滚动(我在这里使用Unix,因为它是我最熟悉的).输出只是写入标准输出.使用“接收器”(>),我们可以控制输出的位置,所以
banner Hello > bannerout
将导致banner的标准输出中的所有数据重定向到shell打开的文件描述符,从而写入名为bannerout的文件.
管道的工作方式类似于>,因为它们有助于控制数据流向的流程.但管道无法写入文件,只能用于帮助数据流从一个点到另一个点.
例如,这里有流经几个变电站的水和废物清洁:
pump --from lake | treatment --cleanse-water | pump | reservoir | pump > glass
水从湖中流过,通过管道到达水处理厂,从工厂流回到将其移动到水库的泵,然后再次泵入市政水管并通过水槽进入玻璃.
请注意,管道只是将所有输出连接在一起,最终它最终会在您的玻璃杯中.
它与命令相同,并在Linux上的shell中处理它们.它还遵循了获得最终结果的途径.
现在最后一件事我还没有在之前的陈述中讨论过,那就是<输入字符.它的作用是从文件中读取并将其输出到程序上的stdin.
cat < bannerout
将简单地打印存储在bannerout中的内容.如果您有要处理的文件,但不想添加cat< file>,则可以使用此选项.因为不想在链中运行额外的命令.
所以试试这个:
echo "Hello" > bannerinput banner < bannerinput
这将首先将字符串“Hello”放在文件bannerinput中,然后当您的运行横幅时,它将从文件bannerinput中读取.
我希望这可以帮助您了解重定向和解压缩在Unix上是如何工作的(如果不是大多数也将适用于Windows).