Linux 命令行准则 3. 错误输出

错误输出应该被写至标准错误stderr),缺省情况下标准错误同样也是终端也就是用户的屏幕):

$ command

这里,运行 command 时出现的任何错误消息都将被写至屏幕。

但是使用标准错误重定向,也可以将错误重定向至文件。例如:

$ command 2>error_file

在这个例子中,command 的正常输出在屏幕显示,而任何错误消息都被写至 error_file。

可以将标准输出和标准错误都重定向至不同的文件,如下所示:

$ command >output_file 2>error_file

这里,将标准输出写至 output_file,而将所有写至标准错误的内容都写至 error_file。

如果已将标准输出重定向至某一位置,也可以将标准错误重定向至同一位置。例如:

$ command 2>&1

在这个例子中,符号“2>&1”表示“将标准错误发送至标准输出被重定向的任何位置”,因此错误和正常的消息都将在屏幕上显示。当然,这是多余的,因为下面简单的调用

$ command

将做同样的事。在标准输出已被重定向至其它源,而您希望在同一命令行上将标准错误也写至同一目的地时,该特性就非常有用。例如:

$ command >output_file 2>&1

在这个例子中,已首先将标准输出重定向至 output_file;因此“2>&1”将使标准错误也被重定向至 output_file。

Linux 命令行准则 4. 执行

程序应该有可能既独立运行,也可以作为管道的一部分运行,如上面的示例所示。该特性可以重新叙述如下:不管程序的输入源文件、管道或终端)和输出目的地是什么,程序都应该以同样的方式工作。这使得在如何使用它方面有最大的灵活性。

Linux 命令行准则 5. 命令行参数

如果程序可以根据其输入或用户的首选参数有不同的行为,则应将它编写为接受名为 选项的命令行参数,这些参数允许用户指定什么行为将用于这个调用。

作为选项的命令行参数由前缀“-”连字符)标识。另一类参数是那些不是选项的参数,也就是说,它们并不真正更改程序的行为,而更象是数据名称。通常,这类参数代表程序要处理的文件名,但也并非一定如此;参数也可以代表其它东西,如打印目的地或作业标识有关的示例,请参阅“man cancel”)。

可能代表文件名或其它任何东西的非选项参数那些没有连字符作为前缀的)如果出现的话,应该在命令的最后出现。

通常,如果指定了文件名参数,则程序把它作为输入。否则程序从标准输入进行读取。

所有选项都应以“-”连字符)开头。选项可以附加参数。

Linux 实用程序语法图看起来如下:

$ command mandatory_opts [ optional_opts ] [ other_args ]

其中:

command 是命令本身的名称。
mandatory_opts 是为使命令正常工作必须出现的选项列表。
optional_opts 是可指定也可不指定的选项列表,这由用户来选择;
但是,其中一些参数可能是互斥的,如同 selpg 的“-f”和“-l”选项的情况详情见下文)。 other_args 是命令要处理的其它参数的列表;这可以是任何东西,而不仅仅是文件名。

在以上定义中,术语“选项列表”是指由空格、跳格或二者的结合所分隔的一系列选项。

以上在方括号中显示的语法部分可以省去在此情况下,必须将括号也省去)。

各个选项看起来可能与下面相似:

-f 单个选项)
-s20 带附加参数的选项)
-e30 带附加参数的选项)
-l66 带附加参数的选项) 

有些实用程序对带参数的选项采取略微不同的格式,其中参数与选项由空格分隔 ― 例如,“-s 20” ― 但我没有选择这么做,因为它会使编码复杂化;这样做的唯一好处是使命令易读一些。


相关内容