首页 > 解决方案 > tcsh 脚本中设置的环境变量不适用于 bash 脚本

问题描述

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

标签: linuxbashshellunixtcsh

解决方案


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

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

因此,如果您有一个 tcsh 脚本和一个 bash 脚本,那么将环境更改从tcsh传播bash的唯一方法是让 tcsh 脚本调用 bash 脚本。不是反过来。


推荐阅读