2017-05-17 16 views
0

昨日私は非常に簡単な作業をしましたが、いいコードではできないような気がします。グローバル変数を持つシェルスクリプト関数

この作業は簡単です:私はインストーラスクリプトの中でwhiptail "interactive"モードで質問したい多くのパラメータを持っています。

コードの詳細:

#!/bin/bash 

address="192.168.0.1" # default address, what the user can modify 
addressT="" # temporary variable, that I want to check and modify, thats why I don't modify in the function the original variable 
port="1234" 
portT="" 
... #there is a lot of other variable that I need for the installer 

function parameter_set { 
    $1=$(whiptail --title "Installer" --inputbox "$2" 12 60 "$3" 3>&1 1>&2 2>&3) # thats the line 38 
} 

parameter_set "addressT" "Please enter IP address!" "$address" 
parameter_set "portT" "Please enter PORT!" "$port" 

が、私は次のエラーました:

"./install.sh: line: 38: address=127.0.0.1: command not found" 

私は別の変数(ない関数のパラメータ)を変更する場合には、うまく動作します。

function parameter_set { 
    foobar=$(whiptail --title "Installer" --inputbox "$2" 12 60 "$3" 3>&1 1>&2 2>&3) 
    echo $foobar 
} 

私はグローバル変数RETVALを使用しようとすると、元の変数に関数の外に割り当て、それは動作しますが、私はそれがこの仕事のために素敵な解決策ではないと思います。

私はそれが間違って何を手伝ってくれますか? :)

事前のおかげで(と私の悪い英語のため申し訳ありません...)、 アッティラ

+0

リダイレクトのため、whiptailコマンドが出力を生成していないようです。したがって、コマンドの置き換えは値を空のままにします。削除してください。また、新しい値をローカル変数に保存する方が良いでしょう。 –

答えて

0

あなたです:whiptailためにコマンドがリダイレクトのanyoutput生産されていないようです。したがって、コマンドの置き換えは値を空のままにします。削除してください。

parameter_set() { 
    local NAME=$1 
    local NEWVALUE=$(whiptail --title "Installer" --inputbox "$2" 12 60 "$3") 
    export $NAME="$NEWVALUE" 
} 
+0

ありがとう、それはうまくいきます:) –

関連する問題