如何防止在c-shell脚本中无意中传递arg来源于其他c-shell脚本(linux)

时间:2018-02-04 15:52:28

标签: csh

在linux上,c-shell是默认解释器......

我提供了一个我传递args的c-shell脚本。在该脚本中,我使用没有args的另一个c-shell脚本。但是我传递父脚本的args传递给了孩子。

问:为什么会这样?

问:如何防止将args传递给子脚本

简单的例子......

cat parent.csh

source ./child.csh
exit

cat child.csh

echo $arvv[*]
exit

会发生什么......

source ./parent.csh abc def
abc def

我不想把“abc”和“def”传给孩子。

1 个答案:

答案 0 :(得分:0)

我想我找到了自己的答案。 (如果错误,请更正)

嵌套“sourcing”(上面示例中的父源代码)就像将源代码./child.csh替换为child.csh的内容(几乎就像“include”)所以如果您的示例代码是。 ..

echo "This is the parents code"
source ./child.csh
echo "Parent exiting"
exit

和...

echo "This is the child code"
echo $argv[*]
echo "Child exiting"
exit

它“真的”看起来像......

echo "This is the parents code"
echo "This is the child code"
echo $argv[*]
echo "Child exiting"
exit    
echo "Parent exiting"
exit

传递给父级的args会暴露给子级,因为它位于同一范围内。这个解释有一个问题......为什么它在子代码中替换为“exit”时不会退出?

无论如何,如果我像这样给孩子打电话......

source child.csh ""

这似乎解决了这个问题。