【问题标题】:Executing Bash script: ERROR: unterminated quoted string at or near执行 Bash 脚本:错误:未终止的带引号的字符串在或附近
【发布时间】:2012-08-01 20:54:33
【问题描述】:

在 bash 脚本中执行以下 psql 语句时出错:

execlog "psql -h $HOST -p $PORT -U $USER -d $DB -q -c 'CREATE EXTENSION hstore;'"

引发的错误是:

错误:在“'CREATE”处或附近未终止的带引号的字符串 第 1 行:'创建 ^

因此,单终止引号无法正常识别。 当使用转义双引号而不是单引号时 (...\"CREATE EXTENSION hstore;\") 我得到了同样的错误。 直接从命令行执行命令时,一切正常。

有人知道出了什么问题吗?

提供一些额外的信息:

操作系统:Ubuntu 11.10,Postgresql 版本:9.1

提前致谢, 理查德

已解决: execlog 函数产生错误。现在我打电话给

log "exec psql -h $HOST -p $PORT -U $USER -d $DB -q -c 'CREATE EXTENSION hstore;'"

效果很好!

感谢您的帮助!

【问题讨论】:

  • 对于 bash 调试 set -x,这会将正在执行的命令写入 stderr。然后你可以看到传递给 psql 的内容。

标签: bash postgresql


【解决方案1】:

问题在于,去掉引号后,单引号不再被当作语法来转义空格,而是将文字字符当作字符串的一部分。试试

execlog psql -h $HOST -p $PORT -U $USER -d $DB -q -c 'CREATE EXTENSION hstore;'

(我在execlog上找不到任何信息,所以我不知道上面是否可行。)

【讨论】:

  • 感谢您指向 execlog(我们库中的一个自己的函数)的指针。这会产生错误...
猜你喜欢
  • 2011-03-30
  • 2013-09-26
  • 1970-01-01
  • 2015-12-14
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多