如何提取confluent-server.service的CONFLUENT_SECURITY_MASTER_KEY环境变量
提取confluent-server.service中特定环境变量的解决方法
问题说明
编写脚本时需要提取confluent-server.service单元里CONFLUENT_SECURITY_MASTER_KEY环境变量的值,但执行systemctl show confluent-server.service --property=Environment后,所有环境变量被合并显示在一行:
Environment=KAFKA_OPTS=-Djdk.tls.ephemeralDHKeySize=2048 -javaagent:/opt/jolokia/jolokia.jar=config=/etc/kafka/kafka_jolokia.properties KAFKA_HEAP_OPTS=-Xms6g -Xmx6g -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80 KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:/etc/kafka/log4j.properties LOG_DIR=/var/log/kafka CONFLUENT_SECURITY_MASTER_KEY=abcdefghYRkHGYhKM4CRQOBVt9C9wKp8QAZ3i5Nzs=
这种格式难以直接拆分和提取目标值。
解决方案
1. 拆分并列出所有环境变量
systemd会将服务单元中的多个Environment=配置合并为一行输出,可通过正则匹配变量名的方式拆分显示每个变量:
systemctl show confluent-server.service --property=Environment | sed 's/Environment=//' | sed -E 's/([A-Z_]+=)/\n\1/g' | tail -n +2
执行后每个环境变量会单独占一行,方便查看全部5个变量。
2. 直接提取CONFLUENT_SECURITY_MASTER_KEY的值
如果仅需要目标变量的值,可使用以下两种快速提取方式:
方法一:grep + sed组合
systemctl show confluent-server.service --property=Environment | grep -o 'CONFLUENT_SECURITY_MASTER_KEY=[^ ]*' | sed 's/CONFLUENT_SECURITY_MASTER_KEY=//'
方法二:awk处理
systemctl show confluent-server.service --property=Environment | awk -F 'CONFLUENT_SECURITY_MASTER_KEY=' '{print $2}' | awk '{print $1}'
执行上述任一命令后,会直接输出CONFLUENT_SECURITY_MASTER_KEY对应的取值(示例中为abcdefghYRkHGYhKM4CRQOBVt9C9wKp8QAZ3i5Nzs=)。
内容的提问来源于stack exchange,提问作者adbdkb
相关产品推荐
相关产品推荐

