shell脚本读取配置文件参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本读取配置文件参数相关的知识,希望对你有一定的参考价值。

参考技术A 1、 读取配置文件时,将注释符#标记的行和空行全部过滤 sed -E '/^#.*|^ *$/d' $env_file 。
2、 匹配指定参数相符的行并截取对应的值 awk -F "$param=" "/$param=/print \$2" 。
3、 获得的结果可能有多个,取最后一个值 tail -n1 。
4、这3步都用 | 管道符连接,其作用是将当前的结果作为下一条命令的输入,连续处理以达到获取参数的最终目的。

python和shell都可以读取的配置文件

【中文标题】python和shell都可以读取的配置文件【英文标题】:A configuration file that can be read by python and shell 【发布时间】:2013-01-04 16:06:49 【问题描述】:

我在同一个文件夹中有 python 脚本和 shell 脚本,它们都需要配置。我目前有一个 config.py 用于我的 python 脚本,但我想知道是否有可能有一个可以被 python 脚本和 shell 脚本轻松读取的单个配置文件。

谁能举例说明最适合python和shell读取的配置文件格式。

【问题讨论】:

我用过YAML,推荐一下。还有python-yaml 【参考方案1】:

保留“config.py”而不是“config.sh”会产生一些漂亮的代码。

config.py

CONFIG_VAR = "value"
CONFIG_VAR2 = "value2"

script.py

import config

CONFIG_VAR = config.CONFIG_VAR
CONFIG_VAR2 = config.CONFIG_VAR2

script.sh

CONFIG_VAR="$(python-c 'import config;print(config.CONFIG_VAR)')"
CONFIG_VAR2="$(python-c 'import config;print(config.CONFIG_VAR2)')"

另外,这比尝试像 Gilles 回答所要求的那样“在 Python 中模拟 Bash '源'”要清晰得多。

【讨论】:

【参考方案2】:

configobj lib 可以帮助解决这个问题。

from configobj import ConfigObj
cfg = ConfigObj('/home/.aws/config')
access_key_id = cfg['aws_access_key_id']
secret_access_key = cfg['aws_secret_access_key']

【讨论】:

我认为您应该在 ['aws_access_key_id'] 之前添加 []。类似 cfg[]['aws_access_key_id']【参考方案3】:

这在 shell 和 python 中都有效:

NUMBER=42
STRING="Hello there"

你还需要什么?

【讨论】:

我认为 OP 希望有一种不违反惯例的方法。 (即不要将文件作为文本文件打开或启动子进程或调用eval 这正是我一直在做的。我现在“需要”的是构建/嵌套配置。例如: BASE_DIR="/home/base" CONFIG_DIR="$BASE_DIR/config" 我怎样才能做到这一点,使其与 bash 和 Python 兼容并且不重复配置?这就是导致我提出这个问题的原因。【参考方案4】:

我认为最简单的解决方案是:

key1="value1"
key2="value2"
key3="value3"

在shell 中,您只需获取此 env 文件,在 Python 中,它很容易解析。

= 周围不允许有空格

对于 Python,请参阅这篇文章:Emulating Bash 'source' in Python

【讨论】:

以上是关于shell脚本读取配置文件参数的主要内容,如果未能解决你的问题,请参考以下文章

linux shell脚本读取用户输入的参数

linux shell 脚本读取用户输入的参数如何解决?

shellclash清理配置文件

linux shell脚本读取用户输入的参数

Linux shell (ssh批量配置免秘)读取配置文件,进行远程操作

怎么用shell脚本 去 读取MySQL中的数据,并把数据传到该脚本中? 谢谢!