tcsh 脚本中设置的环境变量不适用于 bash 脚本

Environment variable set in tcsh script is not available for bash script

我有一个 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

没有全局环境。每个进程都有自己的环境,它可以自由改变。进程环境中的更改会传播到新的子进程,但不会影响任何其他现有进程。

因此 shell 不能通过 运行 外部程序改变它自己的环境。 shell 可以执行脚本 而无需 创建新进程。这称为采购。因此,如果脚本修改了环境变量,则会影响源 shell。但是 bash 无法获取 tcsh 脚本,反之亦然。

因此,如果您有一个 tcsh 脚本和一个 bash 脚本,传播环境变化的唯一方法是 tcsh bash就是让tcsh脚本调用bash脚本。反之则不然。