将bash脚本的输出作为另一个脚本的命令行参数传递



bash和makefile初学者。我有一门课程,我们需要创建一个makefile,每个规则调用一个已经编译的程序。所有编译后的程序都接受一个命令行参数。由于参数可能相当大,并且大多数由一行中相同的字符组成(例如AAAAAAA),我编写了一个脚本,使用python来打印参数。例子:

#!/bin/bash
python -c 'print "A"*1000 + "Q"*200'

我想知道如何在makefile中创建规则,以便将上述脚本的输出作为命令行参数传递。基本上是这样的:

test:
./schoolprogram ./myprogram.sh

所以当执行make test时,/schoolprogram应该以参数1000 A后面跟着200 Q而不是文字字符串"/myprogram.sh".

我不知道为什么你有一个脚本,什么也不做,但调用python;为什么不直接运行python呢?

无论如何,这不是一个真正的makefile问题,它主要是一个shell问题。在编写makefile食谱时,最好的方法是在shell提示符下获取您想要运行的命令,然后使用相同的命令(稍微调整一下)并将其放入makefile中。

在shell中,您可以使用$(...)或反引号(旧的样式)来运行命令并将其替换为该命令的输出。所以你可以运行这个:

$ ./schoolprogram $(./myprogram.sh)

或者更简单:

$ ./schoolprogram $(python -c 'print "A"*1000 + "Q"*200')

现在,当您接受命令并将其放入makefile配方时,您必须记住的是$字符是特殊的,因此,如果您希望将$传递给您的命令,您必须通过将其加倍$$来转义它。所以你会写:

test:
./schoolprogram $$(./myprogram.sh)

或等价:

test:
./schoolprogram $$(python -c 'print "A"*1000 + "Q"*200')

相关内容

最新更新