运行 SQL 时 Bash 中的 `<<-EOSQL` 代码块是啥?
Posted
技术标签:
【中文标题】运行 SQL 时 Bash 中的 `<<-EOSQL` 代码块是啥?【英文标题】:What is the `<<-EOSQL` code block in Bash when running SQL?运行 SQL 时 Bash 中的 `<<-EOSQL` 代码块是什么? 【发布时间】:2016-12-12 12:30:21 【问题描述】:我需要执行一个包含 SQL 的 bash 脚本,因此我使用脚本将自定义配置添加到 Postgres Docker 容器,根据此处的文档:
https://github.com/docker-library/docs/tree/master/postgres#how-to-extend-this-image
但我不知道EOSQL
是什么意思。这是我从上面的文档中获取的脚本示例:
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
CREATE EXTENSION $MY_EXTENSION;
EOSQL
那么,什么是 EOSQL?我似乎找不到有关此命令或关键字的太多信息。
【问题讨论】:
代码没问题;你确定MY_EXTENSION
在运行这个脚本之前被导出了吗?
EOSQL
不是关键字;它只是一个用于标记此处文档边界的任意字符串(SQL 结尾)。
啊,是的,环境变量工作正常。我遇到了另一个错误,我认为这是由于环境变量无法加载引起的。我将我的问题更新为关于 EOSQL 块和 Bash Here 文档,这是我误解的原因。
【参考方案1】:
EOSQL
是Bash Here Document 块的限制字符串。它向 bash 解释器表示文本块的开始和结束。限制字符串可以是块中没有出现的任何文本。
变量替换将在此处文档中正常工作:
#!/usr/bin/env bash
cat <<-EOF
$MY_EXTENSION
EOF
然后使用变量集运行它:
$ MY_EXTENSION=something ./test.sh
something
在 Docker 中,您需要在命令行中的 Dockerfile
或 docker run -e MY_EXTENSION=something <image>
中使用 ENV MY_EXTENSION=something
来设置环境。
【讨论】:
以上是关于运行 SQL 时 Bash 中的 `<<-EOSQL` 代码块是啥?的主要内容,如果未能解决你的问题,请参考以下文章