如何从python EOF中定义bash变量



我对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变量

最新更新