首页 > 解决方案 > 使用 shell 脚本解析 postgres-config.ini 什么都不返回,我错过了什么吗?

问题描述

我在 postgres-config.ini 文件中有这些参数:

PGUSER=usr
PGPASSWORD=pass
PGDATABASE=myDB
PGHOST=localhost
PGPORT=5432

我想解析它并使用 shell 脚本(sh 文件)连接到数据库。我像这样使用 source 和 grep 命令:

source <( grep = postgres-config.ini )

但是,当我尝试使用echo $PGHOST它打印值时,不打印任何内容。

谁能帮助我我做错了什么?

标签: postgresqlshellgrepsh

解决方案


source从命令行替换您的进程替换对我来说很好:

$ cat foo.sh
PGUSER=usr
PGPASSWORD=pass
PGDATABASE=myDB
PGHOST=localhost
PGPORT=5432
$ source <(grep = foo.sh)
$ echo $PGHOST
localhost

请注意,shell 变量不会被导出,因此它们在子进程中不可用。如果您在子流程中需要它们,请尝试:

source <(sed '/=/!d;s/^/export /' foo.sh)

它用于sed向匹配的行添加export命令=

另外,你source从哪里运行?如果它在脚本中,请记住,当脚本结束时变量会消失,并且不会传递给父进程。


推荐阅读