Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
什么是`<<-EOSQL`运行SQL时Bash中的代码块?_Bash_Postgresql_Docker_Environment Variables - Fatal编程技术网

什么是`<<-EOSQL`运行SQL时Bash中的代码块?

什么是`<<-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

我需要执行一个包含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 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