在tcsh脚本中设置的环境变量对bash脚本不可用

4

我有一个bash脚本和一个tcsh脚本,我的tcsh脚本设置了一些环境变量,但是这些变量在执行tcsh脚本之后的bash步骤中不可用。请问如何使在tcsh中设置的环境变量对bash可用。

这里是示例代码:

Bash脚本:

$Naga> cat sample_bash.sh
#!/bin/bash
export SOURCE="NO SOURCE"
./sample_tcsh.csh
echo "Source value in bash is $SOURCE"

tcsh脚本

$Naga> cat sample_tcsh.csh
#!/usr/bin/tcsh -fvx
echo "SOURCE initially $SOURCE"
setenv SOURCE "MY DATASOURCE"
echo "SOURCE value in tcsh is $SOURCE"
exit(0)

结果

$Naga> ./sample_bash.sh
SOURCE initially NO SOURCE
SOURCE value in tcsh is MY DATASOURCE
Source value in bash is NO SOURCE

1
你需要将其作为源码引入,而不是运行它,但由于Bash中没有setenv命令,我不确定它是否能正常工作。 - Arkadiusz Drabczyk
1
可能类似这样可以解决问题:https://dev59.com/J3E85IYBdhLWcg3wkkfK#2710848 - Arkadiusz Drabczyk
3
子进程设置的环境变量不会传播到父进程。 - Shawn
1个回答

1
每个进程都有自己的环境,可以自由更改,没有全局环境。进程环境的更改会传播到新的子进程,但不会影响任何其他现有进程。
因此,一个 shell 不能通过运行外部程序来更改自己的环境。一个 shell 可以执行一个脚本而不创建一个新进程。这被称为 sourcing。因此,如果一个脚本修改了一个环境变量,这会影响 sourcing shell。然而,bash 不能源化 tcsh 脚本,反之亦然。
因此,如果你有一个 tcsh 脚本和一个 bash 脚本,从 tcsh 到 bash 传播环境变化的唯一方法是让 tcsh 脚本调用 bash 脚本。而不能反过来。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接