Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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 在shell脚本中更改shell并执行命令_Linux_Shell - Fatal编程技术网

Linux 在shell脚本中更改shell并执行命令

Linux 在shell脚本中更改shell并执行命令,linux,shell,Linux,Shell,我面临的情况是,我必须在脚本中执行一个只读脚本,该脚本更改shell并设置一些环境变量。现在我需要从脚本中访问这些环境变量 这种情况就像脚本一样 #!/bin/csh -f bash #set some environment variables A,B,C 我没有对script-A的写访问权限,它执行很多配置,这些配置对于script-B是必需的 我已经尝试了脚本-B #!/bin/csh -f ./script-A echo $A 但是,由于shell已更改,我无法访问$A。是否有一些

我面临的情况是,我必须在脚本中执行一个只读脚本,该脚本更改shell并设置一些环境变量。现在我需要从脚本中访问这些环境变量

这种情况就像脚本一样

#!/bin/csh -f
bash
#set some environment variables A,B,C
我没有对script-A的写访问权限,它执行很多配置,这些配置对于script-B是必需的

我已经尝试了脚本-B

#!/bin/csh -f
./script-A
echo $A 
但是,由于shell已更改,我无法访问$A。是否有一些解决方法,我可以这样做


理想情况下,我的script-B中的命令必须在script-A的新环境中运行。在手动交互时,这很好,因为我可以先执行script-A,然后执行所需的命令。但是,我必须自动化整个过程。

如果script-A是csh脚本,那么

source script-A
即使script-A包含exit语句,也可以这样做:

$ cat x.csh 
#!/bin/csh

source y.csh
echo $A - $B

cat y.csh 
#!/bin/csh

set A=10
set B=20
exit 1
set B=30

$ ./x.csh 
10 - 20
如果script-A位于另一个shell中,则需要重写script-B以匹配该shell


哦,顺便说一句,如果可能的话:

用您需要执行的shell语言重写您自己的脚本,以便您可以使用shell的源命令执行它。

这不是实际的脚本-A;就目前的情况而言,它会给你一个等待命令的交互式Bash。我似乎犯了一些错误abt Script-A。因为它目前也不起作用。但Q的哲学仍然是一样的。有一个脚本可以更改shell,并在shell中进行一些配置,使其保持交互。我需要在该shell中执行一些命令,然后您应该为另一个文件提供源代码,而不是执行它:source script-A。这是我尝试的:在script-B中,我为source script-A提供了源代码。但是,脚本中在它之后的命令没有被执行。然后,您必须显示至少部分脚本,这样我们就有了一个源代码。如果每个子进程都执行相同的命令解释器,但情况似乎并非如此。您无法从csh脚本中获取bash脚本的源代码。但他有/bin/csh在他的问题中位于脚本A和脚本B的顶部。。。即使脚本A在内部调用bash,也不应中断源代码。