Linux脚本的源和./执行之间的区别

时间:2011-04-13 07:33:27

标签: linux csh

CSH:

set a=0 
echo "a is $a"

当我这样做./my_script.csh输出是:

a is 

当我输出my_script.csh输出时是:

a is 0 

为什么会如此。据我所知./ execution使用新shell。

2 个答案:

答案 0 :(得分:3)

没错,。/ my_script.csh启动一个新shell,并使用#!您应该在文件的顶部选择要运行的shell(在这种情况下 应该是csh)。

source my_script.csh在当前shell中运行脚本。

如果脚本运行不正确,例如bash shell,设置a = 0不是在bash中设置环境变量的语法,因此代码将无法按预期工作,因为你正在使用错误的外壳。

看看#!在文件的顶部。这是对的吗?

答案 1 :(得分:1)

检查当前shell中是否设置了变量“a”:

set | grep '^a='

请记住,一旦您将脚本发送到当前的shell, 所有它的全局变量都存在,直到取消设置或退出当前shell。 您可能想要启动一个新的shell,获取脚本,结束退出shell以执行有效的测试。

我不知道您的问题的上下文,但您可能想要导出一些关键变量,以便在每个子流程中都有它们的副本。