Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash psql:警告:额外的命令行参数;从「;忽略_Bash_Postgresql_Shell - Fatal编程技术网

Bash psql:警告:额外的命令行参数;从「;忽略

Bash psql:警告:额外的命令行参数;从「;忽略,bash,postgresql,shell,Bash,Postgresql,Shell,我正在尝试执行非交互式postgres命令 PGPASSWORD=$PGPASS psql -h 127.0.0.1 -U postgresql -d $PGDB --command "select count(*) from services" 这给了我这样的回应 psql:警告:忽略额外的命令行参数“from” psql:警告:额外的命令行参数“services;”已忽略 psql:警告:已忽略额外的命令行参数“mydbname” psql:致命:数据库“计数(*)”不

我正在尝试执行非交互式postgres命令

PGPASSWORD=$PGPASS psql -h 127.0.0.1 -U postgresql -d $PGDB --command "select count(*) from services"
这给了我这样的回应

psql:警告:忽略额外的命令行参数“from”

psql:警告:额外的命令行参数“services;”已忽略

psql:警告:已忽略额外的命令行参数“mydbname”

psql:致命:数据库“计数(*)”不存在

我读到这可能是因为终端/bash试图将每个参数分解为
--command
/
-c
,作为它自己的参数

我也试过:

PSQLARGS=(-h 127.0.0.1 -U postgresql -c )
PSQLARGS+=("select count(*) from services;")
PSQLARGS+=(${PGDB})
PGPASSWORD=$PGPASS psql "${PSQLARGS[@]}"

通过某种方式强迫终端知道它是一个参数,这也不起作用。

在我看来,$PGDB是空的,所以psql认为--command是数据库的名称。

这是一个非常便宜且常见的错误。 把每件事都用引号引起来就行了

试试这个:

PGPASSWORD="$PGPASS" psql -h '127.0.0.1' -U 'postgresql' -d "$PGDB" --command "select count(*) from services"

让我们知道它是否适合您。

事实并非如此。我已经注销了
$PGDB
,并将
-d$PGDB
放在命令的不同部分,最后还有
$PGDB
。什么都没用,真有趣。你用的是什么外壳?bash?编写
$PGDB
$PGPASS
是不安全的,因为除此之外,此命令行似乎无法生成这些错误消息。你能提供一个可复制的测试用例吗?@ThomasReggi我也有同样的问题。有什么解决办法吗?@MikeyE请查看下面我的解决方案,并告诉我它是否适用于您: