Bash psql:致命:角色“-h”不存在

Bash psql:致命:角色“-h”不存在,bash,postgresql,centos7,psql,Bash,Postgresql,Centos7,Psql,我一直在网上搜索这个问题,没有一个答案能澄清我的问题 这是我的问题: 我正在尝试使用CentosSSH中的脚本sabc.sh之一运行.sql文件。这些.sql文件在postgreSQL上运行select命令,并将数据检索到文件中。然而,当我试图运行scriptabc.sh时,我看到控制台上抛出一个错误,如下所示 -bash: line 2: <**environment-file-path**>: Permission denied psql: FATAL: role "-h" d

我一直在网上搜索这个问题,没有一个答案能澄清我的问题

这是我的问题:

我正在尝试使用CentosSSH中的脚本sabc.sh之一运行.sql文件。这些.sql文件在postgreSQL上运行select命令,并将数据检索到文件中。然而,当我试图运行scriptabc.sh时,我看到控制台上抛出一个错误,如下所示

-bash: line 2: <**environment-file-path**>: Permission denied
psql: FATAL:  role "-h" does not exist
错误发生在线路上

. /<env_file_path>/yyy.env
export PGPASSWORD=$PGPASSWORD | psql -U $PGUSERNAME $PGNAME -h $PGHOST -c "SET search_path TO xxx;COPY (select....,
我真的不确定是什么导致了这个问题,因为我做了从我这边可以做的一切。 1.我在不同的环境中使用不同的主机和用户凭据执行了相同的脚本,并且成功了。 2.我已经更改了pg_hba.conf文件,也就是说,我使它看起来与脚本成功运行的环境相似

注意:我有一个环境文件,其中存储了上述变量的所有有用信息和参数。第二个代码段是从此环境文件传递的

即使做了这件事,我也看不出这个问题有任何变化。希望这是一个小问题,可以在他人的帮助下轻松解决。

您需要使文件//yyy.env可读 似乎包含该文件的目录缺少执行权限。需要执行才能读取该目录中的文件

但是有一些非常糟糕的shell脚本。。。始终在变量周围使用引号。 也不要使用管道导出

export PGPASSWORD="$PGPASSWORD" 
psql -U "$PGUSERNAME" "$PGNAME" -h "$PGHOST" -c "SET search_path TO xxx;COPY (select....,  "
现在,当您忘记设置$PGNAME时,您将收到一条更合理的错误消息


始终使用引号,如果您遇到没有引号的用例,您可能应该在那里使用数组,并且仍然使用引号。

尝试将变量放在双引号中。他们都准备好了吗?codeforester是对的。您没有设置所有变量。psql看到了-U-h,并且知道-h不是一个角色。我理解。但是可以通过调用env file在.sql文件中设置变量吗?由于我不想直接在.sql文件上写入敏感信息,因此出现错误消息,因为未定义PGUSERNAME和$PGNAME;没有引号的扩展就消失了,留下-h作为-U的参数。此外,导出也不是这样工作的。将密码放在环境中只比放在文件中稍微好一点。