我正在尝试编写一个shell脚本,在运行时,将设置一些将在调用者的shell中保留的环境变量.
setenv FOO foo
Run Code Online (Sandbox Code Playgroud)
在csh/tcsh中,或
export FOO=foo
Run Code Online (Sandbox Code Playgroud)
在sh/bash中只在脚本执行期间设置它.
我已经知道了
source myscript
Run Code Online (Sandbox Code Playgroud)
将运行脚本的命令而不是启动新的shell,这可能导致设置"调用者"环境.
但这里有一个问题:
我希望这个脚本可以从bash或csh调用.换句话说,我希望任何一个shell的用户都能够运行我的脚本并改变他们的shell环境.所以'source'对我来说不起作用,因为运行csh的用户无法获取bash脚本,而运行bash的用户无法获取csh脚本.
有没有合理的解决方案不需要在脚本上编写和维护两个版本?
在Linux中当我从shell调用python时,它复制了它的环境,并启动了python进程.因此,如果我执行以下操作:
import os
os.environ["FOO"] = "A_Value"
Run Code Online (Sandbox Code Playgroud)
当python进程返回时,FOO(假设它原来是未定义的)仍将是未定义的.有没有办法让python进程(或任何子进程)修改其父进程的环境?
我知道你通常用类似的东西来解决这个问题
source script_name.sh
Run Code Online (Sandbox Code Playgroud)
但这与我的其他要求相冲突.