我对bash还比较陌生,无法在标题中解释我的问题,我在谷歌上搜索了很多,我想这就是我想出的标题
我希望能够使用python EOF,并在EOF中定义一个bash变量(如果可能的话(,然后调用它。
test.txt
:
everything - literally the string everything
我正在打开此文件并使用test.sh
:
#!/bin/bash
CMD=$(cat <<EOF
with open('text.txt', 'r') as f:
for line in f.readlines():
pass
print(f"WOW text has {line}")
EOF
)
python3 -c "$CMD"
输出:
WOW text has everything
我希望能够通过在我的CMD
中定义一个变量(idk它的名称(来共享它,并在它完成后在bash中回显它;
#!/bin/bash
CMD=$(cat <<EOF
with open('text.txt', 'r') as f:
for line in f.readlines():
pass
print(f"WOW text has {line}")
$var = line - somehow define a bash variable in python EOF
EOF
)
python3 -c "$CMD"
echo $var - output this
那么(我想要的(新输出是:
WOW text has everything
everything
我希望能够通过在CMD 中定义变量来共享它
这是不可能的。
我想
编写一个Bash内置或路径Bash,并进行修改,创建一个共享内存区域,并引入一个新的特殊变量,该变量使用该共享内存区域来存储和获取变量的值。
使用python中的共享内存区域来存储变量的值。
您还可以进一步走三步,直接引入一个Bash可加载模块,该模块具有通过本地套接字或类似方式进行通信的Python接口,类似于vim Python库。
您可以:
-
输出值,并使用命令替换来捕获python进程的输出,并将该输出分配给变量。
var=$(python -c 'print(line)') echo "$var"
-
将值存储到一个文件中,然后在Bash中读取该文件的内容。或者类似的。
python -c 'open("/tmp/temporaryfile.txt").write(line)' var=$(cat /tmp/temporaryfile.txt) echo "$var"
您可能想要研究";过程"-它们是什么,它们共享什么和不共享什么,以及进程之间的通信方法是什么。
这个解决方案可能很复杂,但使用我的ubuntu
一行python脚本可以
- 导入yaml和sys lib
- lambda函数使用第一个sys.argv1读取yaml文件
- 使用sys.argv2 sys.argv3从lambda函数的返回嵌套字典中获取期望值
- print yaml_as_dict将加载test_var作为变量
- 通过
echo $test_var
检查test_var
`
$
$ test_var=$(python3 -c $"import yaml,sys; yaml_as_dict=(lambda :yaml.safe_load(open(f'{sys.argv[1]}','r').read()))()[sys.argv[2]][sys.argv[3]]; print(yaml_as_dict)" <argv1> <argv2> <argv3>)
$
$ echo $test_var
$
如何从bash脚本中执行多行python代码?
如何使用python在终端中编写多行代码?
如何将多个语句放在一行中?
如何从python EOF 定义bash变量