Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux tcsh脚本中设置的环境变量不适用于bash脚本_Linux_Bash_Shell_Unix_Tcsh - Fatal编程技术网

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

Linux tcsh脚本中设置的环境变量不适用于bash脚本,linux,bash,shell,unix,tcsh,Linux,Bash,Shell,Unix,Tcsh,我有一个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&

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

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

因此,shell不能通过运行外部程序来更改自己的环境。shell可以执行脚本,而无需创建新进程。这就是所谓的采购。因此,如果脚本修改环境变量,则会影响寻源shell。但是,bash无法生成tcsh脚本,反之亦然


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

您需要源代码,而不是运行它,但因为Bash中没有
setenv
,所以我不确定它是否能工作。类似的情况可能会工作:由子进程设置的环境变量不会传播到父进程。