【问题标题】:Pass output of a bash script as command line argument for another script将 bash 脚本的输出作为命令行参数传递给另一个脚本
【发布时间】:2022-12-08 23:22:05
【问题描述】:

这里是 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”运行。

【问题讨论】:

    标签: bash makefile


    【解决方案1】:

    我不知道为什么你有一个除了调用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')
    

    【讨论】:

    • 它比印刷品多一点,但对于我只是保留印刷品的问题 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多