相关疑难解决方法(0)

shell脚本可以设置调用shell的环境变量吗?

我正在尝试编写一个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脚本.

有没有合理的解决方案不需要在脚本上编写和维护两个版本?

bash shell csh tcsh

396
推荐指数
8
解决办法
46万
查看次数

在Python中模拟Bash'source'

我有一个看起来像这样的脚本:

export foo=/tmp/foo                                          
export bar=/tmp/bar
Run Code Online (Sandbox Code Playgroud)

每次我构建时都运行'source init_env'(其中init_env是上面的脚本)来设置一些变量.

为了在Python中实现同样的目的,我运行了这个代码,

reg = re.compile('export (?P<name>\w+)(\=(?P<value>.+))*')
for line in open(file):
    m = reg.match(line)
    if m:
        name = m.group('name')
        value = ''
        if m.group('value'):
            value = m.group('value')
        os.putenv(name, value)
Run Code Online (Sandbox Code Playgroud)

但后来有人决定在init_env文件中添加如下行:

export PATH="/foo/bar:/bar/foo:$PATH"     
Run Code Online (Sandbox Code Playgroud)

显然我的Python脚本崩溃了.我可以修改Python脚本来处理这一行,但是当有人想出一个在init_env文件中使用的新功能时,它就会破坏.

问题是,是否有一种简单的方法来运行Bash命令并让它修改我的os.environ

python bash

81
推荐指数
5
解决办法
6万
查看次数

标签 统计

bash ×2

csh ×1

python ×1

shell ×1

tcsh ×1