将标志传递给bash脚本中的程序

时间:2012-11-29 14:09:46

标签: bash flags

背景

我有一个程序prog,它从stdin获取输入并对其执行某些操作。它还需要一个标志-f FILE来查找操作期间使用的数据文件。

我希望创建一个bash脚本来充当这个程序的包装器,这样就不需要使用这个标志了。所以我写了以下脚本progwrap.sh

#!/bin/bash

/path/to/prog -f /path/to/data

为基本功能提供了技巧,因此我可以执行类似

的操作
$ cat somedata.txt | progwrap.sh

得到我想要的东西。

目标

现在,事实证明prog还会采用-h-u等格式的其他标志...我希望能够将这些标志传递给{{1}这样他们就被转移到了progwrap.sh。所以我修改了prog如下:

progwrap.sh

允许它接受参数并假设将它们提供给脚本中的#!/bin/bash /path/to/prog -f /path/to/data "$@"

问题

然而,这在某种程度上是行不通的:

prog

产生与

完全相同的输出
$ cat somedata.txt | progwrap.sh -h

这不是正确的行为(即,由于-h标志被传递给progwrap.sh,输出应该以不同的格式出现。)

事实上,提供$ cat somedata.txt | progwrap.sh 无意义的参数,progwrap没有支持,并且通常会导致prog抛出错误,但什么都不做。我的结论是,在脚本中调用prog会忽略传递给progwrap.sh的参数。

问题

我做错了什么?如何将标志传递给prog,以便这些标志在我的脚本中传递给progwrap.sh

1 个答案:

答案 0 :(得分:1)

感谢用户使用melpomene提供帮助。事实证明,上面的脚本适用于传递标志,错误在于prog忽略-f File之后的所有标志。修改为:

时,脚本运行正常
#!/bin/bash

/path/to/prog "$@" -f /path/to/data

谢谢!

PS。在我的辩护中,prog的设计者没有记录这种标志行为。