如何在Bash脚本中读取Python文件中的指定变量?
实现方案
这个需求完全可行,不用交互输入就能完成,以下是具体步骤和脚本示例:
1. 从只读Python文件提取变量值
通过grep和awk组合,可以精准提取config.py中iface变量的值,全程不会修改原文件:
# 提取iface的值,适配"iface = 'wlan1'"格式 IFACE_VALUE=$(grep -E "^iface\s*=\s*'" config.py | awk -F "'" '{print $2}')
如果config.py里的iface行有缩进,把正则改成^\s*iface\s*=\s*'即可。
2. 下载目标Bash脚本
用curl或wget下载新脚本,替换成你的实际下载地址:
# 示例:用curl下载到当前目录的new_script.sh curl -o new_script.sh https://your-script-url.com/new_script.sh
3. 同步IWFACE变量到新脚本
用sed替换新脚本中IWFACE变量的取值,不管原脚本里是单引号、双引号还是无引号格式都能适配:
# 替换IWFACE的值,-i.bak会生成原文件的备份(可去掉.bak取消备份) sed -i.bak "s/^IWFACE\s*=\s*['\"]\?.*['\"]\?/IWFACE='$IFACE_VALUE'/" new_script.sh
完整整合脚本
把以上步骤拼成可直接运行的Bash脚本:
#!/bin/bash # 提取config.py中的iface值 IFACE_VALUE=$(grep -E "^iface\s*=\s*'" config.py | awk -F "'" '{print $2}') # 检查提取是否成功 if [ -z "$IFACE_VALUE" ]; then echo "错误:没法从config.py里读到iface变量" exit 1 fi # 下载新脚本 echo "正在下载新脚本..." curl -o new_script.sh https://your-script-url.com/new_script.sh if [ $? -ne 0 ]; then echo "错误:新脚本下载失败" exit 1 fi # 同步变量 echo "把IWFACE设为:$IFACE_VALUE" sed -i.bak "s/^IWFACE\s*=\s*['\"]\?.*['\"]\?/IWFACE='$IFACE_VALUE'/" new_script.sh # 可选:删除备份文件 rm -f new_script.sh.bak echo "操作完成"
注意点
- 确保
config.py中iface的格式和正则匹配,如果是双引号包裹,把grep里的'改成"即可 - 如果新脚本里
IWFACE的行有特殊格式(比如带注释),需要微调sed的匹配规则
内容的提问来源于stack exchange,提问作者Pigsfoot
相关产品推荐
相关产品推荐

