linux - 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
解决方案
没有全球环境。每个进程都有自己的环境,可以自由改变。进程环境中的更改会传播到新的子进程,但不会影响任何其他现有进程。
因此,shell 不能通过运行外部程序来改变自己的环境。但是,shell 可以在不创建新进程的情况下执行脚本。这称为采购。因此,如果脚本修改了环境变量,则会影响源 shell。但是 bash 无法获取 tcsh 脚本,反之亦然。
因此,如果您有一个 tcsh 脚本和一个 bash 脚本,那么将环境更改从tcsh传播到bash的唯一方法是让 tcsh 脚本调用 bash 脚本。不是反过来。
推荐阅读
- react-navigation - react-native run-android 命令通过在 android Device 中留下消息来终止
- python - 如何更改我的绘图图的 X 轴以表示在我的 pandas 数据框中存储为行标题的日期?2020 年 Python 财务食谱
- sql - HIVE 相关子查询
- javascript - 如何在 laravel mix 上正确导入 flatpickr
- python - 使用for循环/函数python将单个数组与数组数组中的单个数组进行比较
- gradle - 在根项目 '' gradle.build 中找不到路径为 '' 的项目
- node.js - TypeORM CLI 无法通过 docker-compose 识别 postgres 主机
- haskell - 如何从haskell中的不同数据类型列表中检索数据
- angular - Angular 8 到 9 迁移(WITHOUT Material)index.d.ts 模块声明问题
- algorithm - 将匹配模式组合成单遍