热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bash–shell脚本中的混合代码.共享变量

Thisanswer讨论了如何从终端中的命令行运行多行Python片段.我注意到答案在shell脚本中很有用,即使是嵌套缩进,这非常好,例如#!binbashsome_textH

This answer讨论了如何从终端中的命令行运行多行Python片段.我注意到答案在shell脚本中很有用,即使是嵌套缩进,这非常好,例如

#!/bin/bash
some_text="Hello world"
echo $some_text
cat <import sys;
for r in range(3):
print r
for a in range(2):
print "hello"
EOF

打印:

0
hello
hello
1
hello
hello
2
hello
hello

但是,我很难在shell脚本和Python片段之间共享变量.

>如何在bash脚本中收集python下标的输出? (例如在$output等变量中).
>如何将bash变量(例如$some_text)传递给Python脚本?

解决方法:

获取Python的变量

由于(当没有引用EOF标记时)变量替换发生在将文本从heredoc传递到python的标准输入之前,您可以在脚本中正确抛出变量.

python - <some_text = "$some_text"
EOF

如果some_text被测试,python会看到some_text =“test”.但请注意,它可以被视为代码注入漏洞.如果some_text是“; import os; os.system(”evil-command“); x =”,例如,python会看到:

some_text = ""; import os; os.system("evil-command"); x = ""

并运行那个邪恶的命令.

如果您希望能够将Python代码直接引入脚本而不进行任何修改,则可以导出变量.

export some_text

并使用os.environ来检索它.

some_text = os.environ['some_text']

这是一种更安全/更安全的方法.

从Python获取输出

您可以使用命令替换来收集脚本的输出.

output=$(
python - <import sys;
for r in range(3):
print r
for a in range(2):
print "hello"
EOF
)

(请注意,所有尾随的换行符都已删除)


推荐阅读
author-avatar
歌歌了_618
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有