next up previous contents index
Next: 文件名的扩展 UP: Shell的使用 Previous: 别名   目录   索引

细分

输入和输出的控制

在您使用Linux的整个过程中,您很可能发现控制程序的输入和输入的效果是显著的。这一节叙述控制输入和输入将能为您带来些什么。


标准输入, 标准输出, 管道, 和 重定向

每个进程和外部世界至少有三个连接。标准输入是进程的一个数据来源;标准输出 是其输出数据的一个地方;标准错误设备是进程可以输出错误信息的一个地方(它们通常简写为 stdin stdout,和 stderr。)

单词“源”和“地方”是故意含糊其词的。 这些标准输出和输出定位可以被用户修改;它们可以是屏幕,键盘,一个文件, 甚至一个网络连接。您可以定向它加以使用。

当您在shell下运行一个程序时,通常键盘是标准输入,标准输出和错误显示都是显示屏。然而您可以让shell改变这些缺少设置。

举个例子, echo这个命令把它的输入送到标准输出,通常是屏幕。 但是您可以把它送给一个文件——通过使用输出重定向操作符。 比如,把单词“Hello”放到myfile文件中,可以使用如下命令:

echo Hello > myfile
使用 cat 或您的文本文件定页阅读器 (moreless) 来看 myfile的文件内容;请看图 6.3 ,在 [*]页。

图 6.3: 重定向输出
\begin{figure}
\par\par\begin{list}{}{
\setlength {\rightmargin}{\leftmargin}\ra...
...llo~>~myfile}
\par\$~\textbf{cat~myfile}
\par Hello
\par\$\end{list}\end{figure}

您可以用 输入重定向操作符 < 来改变一个命令的标准输入, 例如, cat < myfile 将显示 myfile 的内容。 在实际应用中这是什么意义的;出于方便,cat 命令接受一个文件名参数。所以你只要键入 cat myfile, 效果是相同的。重定向操作符

此时cat < myfile的意思是shell打开文件myfile,然后把它的内容送到cat的标准输入。 cat myfile,即在没有重定操作符时,意思是cat这个命令接受一个参数(myfile),自己打开这个文件,然后显示这个文件的内容。

存在这样的两种方法是有道理的。比如,您可以把一个命令的标准输出连到另一个命令的标准输入。 这叫做 管道,使用 管道操作符 6.1, |.

也许您想倒着看GNU的通用公共证书。为了做到这一点,您会使用 tac 命令, (它就是 cat,只不是倒着的)。请试一下:

tac /usr/doc/copyright/GPL 
不幸地是,它闪得太快而很不见。所以您只能看到一些章节。解决方法是使用管道(pipeline)

tac /usr/doc/copyright/GPL | less
这将取 tac 的标准输出,GPL,再送到 less 的标准输入。

您可以把许多命令链接在一起。假如您有一个莫名的欲望想用 Q 替换所有的 G 。 为此您要使用命令 tr G Q ,如:

tac /usr/doc/copyright/GPL | tr G Q | less 
您也可以使用临时文件和重定向来获得相同的效果,比如:

tac /usr/doc/copyright/GPL > tmpfile

tr G Q < tmpfile > tmpfile2

less < tmpfile2

rm tmpfile tmpfile2 

很明显使用管道方便多了。


next up previous contents index
Next: 文件名的扩展 UP: Shell的使用 Previous: 别名   目录   索引
John Goerzen / Ossama Othman