等待shell命令在makefile中执行

时间:2016-03-07 00:12:14

标签: bash shell makefile

我一直在努力学习如何使用make并遇到一个障碍,我假设这与制定流程管理有关,而不是制作。

我有以下目标

install:
    ...
    @brew install postgres
    @pg_ctl -D data initdb
    @pg_ctl -D data start
    @createuser foo -s

我安装postgres,创建数据库,启动它,然后创建用户。

在这种情况下,createuser继续失败,因为数据库还没有启动。

我假设需要发生的事情是我需要使用wait来推迟创建用户命令,直到数据库启动,但经过一个小时的争吵之后,我有一种感觉#39;我没有正确使用像

这样的东西
@pg_ctl -D data start &
@wait $!
@createuser ...

知道我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

-w命令中添加pg_ctl ... start选项,以确保在数据库启动完成之前命令没有返回:

@pg_ctl -w -D data start

来自man page(强调我的):

  

-w   等待启动或关闭完成。 等待是关机的默认选项,但不是启动 。等待启动时​​,pg_ctl会反复尝试连接到服务器。等待关闭时,pg_ctl等待服务器删除其PID文件。 pg_ctl根据启动或关闭成功返回退出代码。

至于您的解决方案尝试:

正如Oliver Charlesworth在对该问题的评论中指出的那样,@pg_ctl -D data start@pg_ctl -D data start &后跟@wait $!相当于相同的 :(有效地)同步执行 CLI

问题是,当执行 CLI本身pg_ctl同步时,它触发的操作不是;添加-w修复了。

事后看来,您的问题与make无关。