2013-07-29 38 views
2

我想设置一个命令作为程序的配置选项。 有参数传递给命令。替代... sed ... <(cmd)和cmd | sed

但我希望命令的输出被替换为sed。

原则上我想要做这样的事情:

option = cmd <arg1> <arg2> | sed s/x/y/ 

但该选项只能这样设置的:

option = cmd 

和参数是由程序自动添加。

所以我想 “反向” 像这样的管道:

option = sed s/x/y/ < <(cmd) 

但由于程序追加以下将 被exectuted参数:

sed s/x/y/ < <(cmd) <arg1> <arg2> 

,但我想

sed s/x/y/ < <(cmd <arg1> <arg2>) 

由于在参数I的选项中没有占位符我无法正确关闭括号。

有没有办法解决这个问题,而不写封装脚本?

+0

如果你做'option =“cmd arg1 args2”'会怎么样?也许这样一切都会放在'<(part)' – fedorqui

+0

不是,我只谈到了arg1和arg2来说明我的意图。程序会自动将任何arg1和arg2附加到选项命令的末尾。下面的解决方案是完美的 - 谢谢! – metakeule

回答

3

如果你小心地使用引号,你可以做这样的:

option = bash -c 'cmd "$1" "$2" | sed "s/x/y/"' sub 

末字“子”是任意的,而是必要的;它在那里,因为用bash -c创建的子shell中的$1实际上是第二个位置参数,而不是第一个。

+0

+1作为个人喜好的事情,我喜欢在'sub'使用'_'。你会看到很多像'find这样的命令。 ... -exec sh -c'do stuff“$ @”'_ {} +' – kojiro

+0

@kojiro:我也经常使用那个(或 - ),但在一个例子中很容易忽略,许多cargoculters似乎都相信它是某种特殊的语法,所以我试图避免它在解释。 – rici

+0

我需要\原来的sed,所以我去了 'bash -c'cmd“$ 1”“$ 2”| sed“s/^ \\ + \\ + \\ + \\\ s/+++ /”'_' 谢谢! – metakeule