2017-05-17 4 views
0

어제 저는 매우 쉬운 작업을했지만 어쨌든 멋진 코드로는 할 수없는 것처럼 보입니다.전역 변수가있는 쉘 스크립트 함수

작업은 간단합니다. 설치 스크립트에서 whiptail "대화식"모드로 묻고 싶은 많은 매개 변수가 있습니다.

코드의 세부 사항 :

#!/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 명령이 anyoutput 명령을 생성하지 않는 것으로 보입니다. 명령 대체는 값을 비워 둡니다. 제거하십시오. 또한 먼저 로컬 변수에 새 값을 저장하는 것이 좋습니다. –

답변

0

당신의 채찍 꼬리 명령 때문에 리디렉션의 anyoutput을 생산하지 않는 것 같습니다. 명령 대체는 값을 비워 둡니다. 제거하십시오. 또한 새로운 값을 먼저 로컬 변수에 저장하는 것이 더 좋습니다.

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

감사합니다. 잘 작동합니다. :) –