gpt4 book ai didi

linux - 如何在文本文件中传递和访问环境变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:12 24 4
gpt4 key购买 nike

我想将环境变量传递给文本文件。

用例:

我正在从 Dockerfile 构建一个 docker 镜像并运行一个使用文本文件的 java 命令。该文本文件包含一些我想使用环境变量传递的关键字。

Docker 文件:

FROM openjdk:8u151-jdk-alpine3.7

WORKDIR /sink

COPY kafka-connect-cli-1.0.6-all.jar /sink

COPY cassandra-sink-distributed-orders.properties /sink

CMD ["sh", "-c", "java -jar kafka-connect-cli-1.0.6-all.jar create cassandra-sink-casb < cassandra-sink-distributed-orders.properties"]

cassandra-sink-distributed-orders.properties 是文本文件。

Cassandra-sink-distributed-orders.properties:

name=cassandra-sink-casb
connector.class=com.datamountaineer.streamreactor.connect.cassandra.sink.CassandraSinkConnector
tasks.max=1
topics=topic1
connect.cassandra.kcql=INSERT INTO table1 SELECT * FROM topic1;
connect.cassandra.port=9042
connect.cassandra.key.space=casb
connect.cassandra.contact.points=cassandra
connect.cassandra.username=cassandra
connect.cassandra.password=cassandra

在这个文本文件中,我想传递 connect.cassandra.usernameconnect.cassandra.passwordconnect.cassandra.key.space 使用环境变量。

这是我的 docker-compose 文件:

cassandra-sink:
container_name: cassandra-sink
image: casb-cassandra-sink:0.1
#build:
# context: ./cassandra-sink
# dockerfile: Dockerfile
depends_on:
cassandra:
condition: service_healthy
depends_on:
kafka-connect:
condition: service_healthy
links:
- kafka
- kafka-connect
- cassandra
environment:
- KAFKA_CONNECT_REST=http://kafka-connect:8083

最佳答案

您需要定义 file format你的文本文件。您可能决定使用一些现有 格式,例如 JSONYAML等等......或者发明你自己的。在后一种情况下,您应该记录您的文件格式,也许使用 EBNF符号。您还将记录 semantics与该格式相关(至少在英语中)。

一旦定义了文件格式,就需要对其进行解析。有标准parsing技术,特别是 recursive descent parsers (如果您使用现有的格式,例如 JSON,您会发现许多现有的库都在处理它)。

I want to pass environment variables to a text file.

严格来说,这没有任何意义。文本文件只是解析为某些文本的字节序列。您可以将环境变量传递给程序(而不是文件)。

也许你可以写一些shell script使用 here documents在您的脚本中生成该文本文件(或将其提供给您的程序的 stdin),然后在 Dockerfile< 的 CMD 行中运行该 shell 脚本.

也许你的解析器可能有约定来处理一些符号作为获取一些环境变量的意义。您将使用 getenv(3) (或您的编程语言中的任何等效语言)。

您需要熟悉基本的解析概念和技术。所以读一本好的“编译器书”,比如 Dragon Book .

您还可以考虑在您的程序中嵌入一个解释器(查看 scripting languages for Java)。

关于linux - 如何在文本文件中传递和访问环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49145406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com