2015-11-02 82 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