什么是`<<-EOSQL`运行SQL时Bash中的代码块?
我需要执行一个包含SQL的bash脚本,因此我正在使用一个脚本向Postgres Docker容器添加自定义配置,根据以下文档: 但是我不知道EOSQL是什么意思。以下是我从上述文档中提取的脚本示例:什么是`<<-EOSQL`运行SQL时Bash中的代码块?,bash,postgresql,docker,environment-variables,Bash,Postgresql,Docker,Environment Variables,我需要执行一个包含SQL的bash脚本,因此我正在使用一个脚本向Postgres Docker容器添加自定义配置,根据以下文档: 但是我不知道EOSQL是什么意思。以下是我从上述文档中提取的脚本示例: #!/bin/bash set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL CREATE USER docker; CREATE DATABASE docker; GRANT
#!/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
#/bin/bash
set-e
psql-v ON_ERROR_STOP=1——用户名“$POSTGRES_USER”EOSQL
是块的限制字符串。它向bash解释器表示文本块的开始和结束。限制字符串可以是块中未显示的任何文本
变量替换将在here文档中正常工作:
#!/usr/bin/env bash
cat <<-EOF
$MY_EXTENSION
EOF
在Docker中,您需要在Dockerfile
中使用ENV MY_EXTENSION=something
或在命令行中使用Docker run-e MY_EXTENSION=something
来设置环境。代码很好;您确定在运行此脚本之前导出了我的扩展名吗?EOSQL
不是关键字;它只是一个用来标记here文档边界的任意字符串(SQL结尾)。我遇到了另一个错误,我认为这是由于未能加载环境变量造成的。我将我的问题更新为关于EOSQL块和Bash-Here文档,这是我产生误解的原因。
$ MY_EXTENSION=something ./test.sh
something