2015-11-02 143 views
0

我想将我在下标中设置的变量传递给父脚本。我想这样做,无论是作为一个功能或只是 “回声” 荷兰国际集团的变量:csh:如何将变量从下标传递给父脚本

parent.sh

#!/bin/csh 
enter code here 
set VAR_2_CHILD_1 = myName 
set VAR_2_CHILD_2 = MAIN_PATH/output.txt 

$MAIN_PATH/child.sh $VAR_2_CHILD_1 $VAR_2_CHILD_2 

child.sh

#!/bin/csh 

if ($1 =~ *something*) then 
    set NAME_SL  = False 
    set SUBDIRID = True 
    echo $1 $SUBIDDIR  >> $2 
endif 

echo $NAME_SL $SUBDIRID 

或:

#!/bin/csh 

function pass_var() { 

if ($1 =~ *something*) then 
    set NAME_SL  = False 
    set SUBDIRID = True 
    echo $1 $SUBIDDIR  >> $2 
endif 

return $NAME_SL $SUBDIRID 
} 

在后面的情况下,我不知道如何调用parent.sh中的函数

一般而言,下标应根据$ VAR_2_CHILD_1和VAR_2_CHILD_2在选项之间进行选择,并返回一些字符串变量$ NAME_SL和$ SUBDIRID。我不知道该怎么做。

我还在这里阅读其他问题,如:Bash - Return value from subscript to parent script但我找不到任何适合我的东西。

回答

0

啊!你很高兴我的心。写了csh 10年(使用csh,sed,awk和管道)。刚查过我的档案:650个脚本和51000行。然后,我发现了perl并切换了一切。目前perl是770个文件和206,000行。

无论如何,有几件事。 csh没有函数,所以你需要使用child.sh。 (请使用.csh或无后缀-bash获得太多关注,因为它是:-)

请注意,csh 确实有别名。 csh别名比bash别名更强大,因为它们可以带参数列表。您可以使用;来获得多行脚本的效果,但它是有限制的。

家长可以捕捉孩子的输出[无论是脚本或别名】通过virgule操作:

#!/bin/csh 
# enter code here 
set VAR_2_CHILD_1 = myName 
set VAR_2_CHILD_2 = MAIN_PATH/output.txt 

set result=(`$MAIN_PATH/child.sh $VAR_2_CHILD_1 $VAR_2_CHILD_2`) 
set NAME_SL="$result[1]" 
set SUBDIRNAME="$result[2]" 

在孩子身边调用的括号是因为孩子返回两个词,所以你需要一个阵列来捕捉他们[如果你想独立操纵他们]

+0

非常感谢你的回复和帮助!它工作完美:-)! – firefly2517

+0

@ firefly2517感谢您的礼貌。我最近24小时:评论中的he客。他们错了 - 我的母亲将永远不会做这件事:-)。还有一个,OP有一个联网计划。我们正在使用注释实时调试它:试试这个,结果是什么?试试这个......使用OP2小时。 Heckler敲响了OP和OP,撤回了[+3]问题[25条有用评论]:我离解决方案大约15分钟。顺便说一句,你是如何决定使用csh的?很久以前很流行,现在“这是一个bash,bash,bash,bash世界”(bash == mad)即使使用perl,csh仍然是我的登录shell。 –

+0

生活把我带到csh ;-),我只是滑入它,但我喜欢它。有人向我展示了如何使用.sh-files来配置我的python程序。他使用csh和C,我现在使用csh和Python 2.7.10。也许我应该转向更花俏的东西,但我相信简单!它工作正常(至少有时;-))! – firefly2517

相关问题