背景
我有一个程序prog
,它从stdin获取输入并对其执行某些操作。它还需要一个标志-f FILE
来查找操作过程中使用的数据文件。
我希望创建一个bash脚本作为这个程序的包装器,这样就不需要使用这个标志了。所以我写了以下脚本progwrap.sh
:
#!/bin/bash
/path/to/prog -f /path/to/data
它完成了基本功能的技巧,这样我就可以做一些类似的事情
$ cat somedata.txt | progwrap.sh
得到我想要的。
目标
现在,事实证明prog
还采用了-h
、-u
等形式的一些其他标志。我希望能够将这些标志传递给progwrap.sh
,以便它们依次传递给prog
。因此,我将progwrap.sh
修改如下:
#!/bin/bash
/path/to/prog -f /path/to/data "$@"
允许它接受参数并假定将它们提供给脚本中的CCD_ 10。
问题
然而,这在某种程度上不起作用,因为:
$ cat somedata.txt | progwrap.sh -h
产生与完全相同的输出
$ cat somedata.txt | progwrap.sh
这不是正确的行为(即,由于-h标志被传递到progwrap.sh,输出应该以不同的格式出现)
事实上,为prog
不支持的progwrap
无意义自变量提供信息(通常会导致prog
抛出错误)并没有任何作用。我得出的结论是,传递给progwrap.sh
的参数被脚本中对prog
的调用所忽略。
问题
我做错了什么?如何将标志传递到progwrap.sh
,以便在脚本中将这些标志传递给prog
?
感谢用户melpomine的帮助。事实证明,上面的脚本可以传递标志,而错误在于prog
忽略了-f File
之后的所有标志。当修改为时,脚本运行良好
#!/bin/bash
/path/to/prog "$@" -f /path/to/data
谢谢!
PS。在我的辩护中,prog
的设计者没有记录这种旗帜行为。