我们的环境有一个shell脚本来设置工作区域。 JsonUtility
看起来像这样:
.FromJson<TypeOfTheClassImMappingTo>
用户执行以下操作:
myObject = JsonUtility.FromJson<MyClass>(json);
我们的一些用户正在寻找setup.sh
版本,这意味着有两个设置文件。
我想知道是否有办法使用常见的python文件来完成这项工作。在[StackOverflow] Serialize and Deserialize Json and Json Array in Unity
Kenneth Reitz建议在项目中使用 export BASE_DIR=$PWD
export PATH=$BASE_DIR/bin
export THIS_VARIABLE=THAT_VALUE
文件,但我不确定Python是否可以像在上面那样在shell中设置环境变量。
我可以用执行相同操作的python脚本替换此shell脚本吗?我不知道怎么做。
(还有其他一些问题可以通过许多评论更广泛地提出这个问题,但这个问题有直接的问题和直接的单一答案。)
答案 0 :(得分:3)
不,Python(或类似Unix平台上的任何进程)都无法改变其父级环境。
一个常见的解决方案是让脚本以适合用户shell的格式打印输出。例如。 ssh-agent
将打印sh
- 与-s
兼容的全局分配,或者当它看到从Bourne兼容的shell调用它时;如果从csh
或csh
调用或使用tcsh
显式调用,则为-c
语法。
sh
- 兼容shell中的常规调用是$(eval ssh-agent)
- 因此程序打印的文本由用户调用此命令的shell进行评估。
eval
是一个众所周知的安全风险,所以即使对于那些不会说太多Python(或shell,或其他任何东西)的人来说,你也希望这个代码很容易被审查。 / p>
如果你是,咳嗽,对直接支持Csh用户持怀疑态度,也许你可以说服他们在兼容Bourne的shell中运行你的sh
兼容脚本,然后{{ 1}}获得他们喜欢的互动环境。这也避免了为支持Csh,Fish,exec csh
,Powershell等用户提供越来越少的维护挑战的滑坡。