【问题标题】:How to use lsof inside of Makefile如何在 Makefile 中使用 lsof
【发布时间】:2021-05-18 10:15:09
【问题描述】:

假设我有类似的东西

.PHONY: kill-server
kill-server:
   kill -9 $(lsof -t -i :9000)

为什么它不起作用,我该如何解决?

【问题讨论】:

  • 您没有指定您使用的是哪个 make,但在我所知道的所有这些中,$(FOO) 扩展了 make 内部的变量 FOO。例如见here
  • @user1934428 但对于调用函数,我也使用$(),不是吗? gnu.org/software/make/manual/html_node/…
  • 对于 make 函数,但 lsof 不是 make 函数。 this 有帮助吗?
  • $(lsof -t -i :9000) 在读取 makefile 时将扩展为 make。要将执行推迟到运行kill-server 的点,请改用$$(lsof -t -i :9000)
  • 仅供参考,$(lsof ...) 不会在“读取 makefile 时”被 make 扩展。这是配方的一部分,当 make 想要运行它时,配方将被 make 扩展,就在调用 shell 来构建目标之前。如果目标从未构建,则配方将永远不会扩展。

标签: bash makefile lsof


【解决方案1】:

您可以在您的 makefile 中通过管道将 lsof 传递给 xargs

# Makefile - Version 1

# Send kill to server
kill-server:
    lsof -t -i :9000| xargs kill -9

【讨论】:

    【解决方案2】:

    好伤心。太混乱了。

    这很简单:$ 是特殊的。它引入了一个 make 变量。如果您编写了一个配方(这是一个 shell 脚本)并且您希望 shell 看到 $ 您必须将其转义以便 make 不会扩展它作为make变量。这完全是微不足道的,你只需在任何你想将$ 传递给shell 的地方写$$

    .PHONY: kill-server
    kill-server:
            kill -9 $$(lsof -t -i :9000)
    

    就是这样。完成。

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 2014-09-04
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 2023-03-19
      相关资源
      最近更新 更多