【发布时间】:2017-04-06 20:57:19
【问题描述】:
我有一个这样运行的命令:
$ cmd <file_name> [option]
[option] 是可选的,命令可以从stdin 读取。所以下面的命令是可以的:
$ cmd file
$ cmd file option
$ cat file | cmd
但是,使用 [option] 从 stdin 读取会出错:
$ cat file | cmd option
Cannot open file: option
那么如何构造命令,或者我必须更改程序以正确读取stdin?
谢谢。
【问题讨论】:
-
不接受文件名作为参数。仅解析命令行以获取选项。如果用户想从文件中读取,他们可以重定向
cmd option < file -
能看到cmd的代码吗?
-
典型的模式是“选项”先出现,并用破折号标记,然后是参数(即“cat -v 文件”或“ls -lh dir”)您可能想要看看“man getopt”。
-
option是一个简单的标志或一组单个值(如 Y/N 或红色/绿色/蓝色/黑色)?或者是一组选项(如-d -f -t等)?如果是后者,您能否添加一个选项来控制您的脚本是查找文件还是从标准输入获取输入? (请注意,这在很大程度上取决于文件/标准输入的使用位置以及数据的外观。如果您可以分享 cmd 实际在做什么,我们可能会提供更多帮助。 -
这只是一个单值选项。无论如何,正如@WilliamPursell 所说,只是做了一个快速修复。将寻找其他人建议的其他选项。谢谢大家。
标签: linux shell unix command-line