2016-04-18 13 views
1

別のファイルの別の関数によって呼び出されている関数から戻り値として文字列を送信しようとしています。 1つは他のソース。 )bashのある関数から別の関数に文字列戻り値を取り込みます

##################################################### 
##filename: conf_abc.menu 
####################################################### 
#!/bin/bash 
source <path>/conf_pqr.menu 

function abc() { 
    var=$(call_pqr) 
    echo ${var} 
} 
##Calling function abc 
abc 

######################################################### 
##filename: conf_pqr.menu 
######################################################## 
#!/bin/bash 

RET_VAL="" 
function get_intf() { 
    cmd=`some command` 
    RET_VAL=${cmd} 
} 

function call_pqr() { 
    comm=$(array of choices) 
    for choice in $comm 
    do 
     case $choice in 
     IF)get_intf; 
     echo "$RET_VAL";; 
     esac 
    done 
} 

私は、関数ABC(の "VAR" の配列から選択を見ることを期待:

コードはそうのような、です。
しかし、conf_abc.menuの "echo $ {var}"は何も出力しません。

私はやってスクリプトを実行します。 ./conf_abc.menu

私が間違って何をやっているの?

+1

「IF」のケースがヒットしていることをご存じですか? 'echo" $ RET_VAL ">&2'を追加して、' $ RET_VAL'にあなたが思うものが含まれていることを確認してください。ところで、あなたが[mcve]を作成した場合、それは "選択肢の配列"と "あるコマンド"を実際の値に置き換えることで可能になります。 –

+0

メインスクリプトに 'set -x'を追加して、あなたのスクリプトが実行されているときに実際に実行されているコマンドを見てください。 –

答えて

0

コメントありがとうございます。関数から戻り値が呼び出されると、エコーからの出力全体が戻り変数に取り込まれることがわかりました。私は "> & 2"を使って出力をフィルタリングしました。私は適切なリターン文字列を取得することがわかります。 私が見つかり、この:私はここに、最小限の例に入れている stackoverflow.com/questions/11758368/shell-script-function-return-a-string

##**file: vlan_menu.sh** 
#!/bin/bash 
source <path>/ifs_menu.sh 

function conf_vlan() { 
    echo "Calling function if_menu" >&2 
    local output1=$(if_menu); 
    echo "printing result" >&2 
    ENET1="${output1}" 
    echo "ENET1 is= "${ENET1}"" >&2 
} 
conf_vlan; --> calling the main function 

##**file: ifs_menu.sh** 
#!/bin/bash 

RET_VAL="" 

function get_if() { 
    PI=$1 
    local var1=$(shell command) 
    if [ ! -z "${PI}" ] 
    then 
     local var2=<do something with var1> 
    else 
     local var2=<do something with var1> 
    fi 
    local cmd=$(start shell utility) 
    RET_VAL=${cmd} 
} 

function if_menu() { 
comm=(1 2 3 4 5) 
for choice in ${comm} 
do 
    case $choice in 
    1) echo "IF" >&2; 
     get_if ""; 
     echo "${RET_VAL}";; 

    2) echo "SF" >&2; 
     get_if $1; 
     echo "${RET_VAL}";; 
    esac 
done 
} 

を「vlan_menu.sh」スクリプトファイルを実行した後、「ENET1」の値がRET_VAL」と同じですそれは私が見たいと思ったものです。

-rsmitha。

関連する問題