handle bash args properly using arrays
authormkrzewic <mikolaj.krzewicki@cern.ch>
Mon, 7 Apr 2014 11:29:22 +0000 (13:29 +0200)
committermkrzewic <mikolaj.krzewicki@cern.ch>
Mon, 7 Apr 2014 11:42:04 +0000 (13:42 +0200)
PWGPP/QA/scripts/alienSync.sh
PWGPP/QA/scripts/runQA.sh
PWGPP/benchmark/benchmark.sh

index 7bc2e22..c30d526 100755 (executable)
 main()
 {
   if [[ $# -lt 1 ]]; then
-    echo Usage: $0 configFile
+    echo "Usage:  ${0##*/} configFile=/path/to/config"
+    echo "expert: ${0##*/} alienFindCommand=\"alien_find /some/path/ file\" [opt=value]"
     return
   fi
 
   # try to load the config file
-  [[ ! -f $1 ]] && echo "config file $1 not found, exiting..." | tee -a $logFile && exit 1
-  source $1
-  
+  #[[ ! -f $1 ]] && echo "config file $1 not found, exiting..." | tee -a $logFile && exit 1
+  if ! parseConfig "$@"; then return 1; fi
+
+  if [[ -z ${alienFindCommand} ]] && echo "alienFindCommand not defined!" && return 1
+
   #if not set, use the default group
   [[ -z ${alienSyncFilesGroupOwnership} ]] && alienSyncFilesGroupOwnership=$(id -gn)
 
@@ -464,4 +467,43 @@ copyFromAlien()
   fi
 }
 
+parseConfig()
+{
+  #config file
+  configFile=""
+  alienFindCommand=""
+  secondsToSuicide=$(( 10*3600 ))
+  localPathPrefix="${PWD}"
+  logOutputPath="${PWD}/alienSyncLogs"
+  unzipFiles=0
+  allOutputToLog=1
+
+  args=("$@")
+
+  #first, check if the config file is configured
+  #is yes - source it so that other options can override it
+  #if any
+  for opt in "${args[@]}"; do
+    if [[ ${opt} =~ configFile=.* ]]; then
+      eval "${opt}"
+      [[ ! -f ${configFile} ]] && echo "configFile ${configFile} not found, exiting..." && return 1
+      echo "using config file: ${configFile}"
+      source "${configFile}"
+      break
+    fi
+  done
+
+  #then, parse the options as they override the options from file
+  for opt in "${args[@]}"; do
+    if [[ ! "${opt}" =~ .*=.* ]]; then
+      echo "badly formatted option ${var}, should be: option=value, stopping..."
+      return 1
+    fi
+    local var="${opt%%=*}"
+    local value="${opt#*=}"
+    echo "${var} = ${value}"
+    export ${var}="${value}"
+  done
+}
+
 main "$@"
index f08f31d..e378b71 100755 (executable)
@@ -423,6 +423,8 @@ validateLog()
 
 parseConfig()
 {
+  args=("$@")
+
   #config file
   configFile=""
   #where to search for qa files
@@ -444,25 +446,26 @@ parseConfig()
   #first, check if the config file is configured
   #is yes - source it so that other options can override it
   #if any
-  for opt in $@; do
+  for opt in "${args[@]}"; do
     if [[ ${opt} =~ configFile=.* ]]; then
       eval "${opt}"
       [[ ! -f ${configFile} ]] && echo "configFile ${configFile} not found, exiting..." && return 1
+      echo "using config file: ${configFile}"
       source "${configFile}"
       break
     fi
   done
 
   #then, parse the options as they override the options from file
-  while [[ -n ${1} ]]; do
-    local var=${1#--}
-    if [[ ${var} =~ .*=.* ]]; then
-      eval "${var}"
-    else
+  for opt in "${args[@]}"; do
+    if [[ ! "${opt}" =~ .*=.* ]]; then
       echo "badly formatted option ${var}, should be: option=value, stopping..."
       return 1
     fi
-    shift
+    local var="${opt%%=*}"
+    local value="${opt#*=}"
+    echo "${var} = ${value}"
+    export ${var}="${value}"
   done
 }
 
index ca34a37..9a3ef06 100755 (executable)
@@ -2242,13 +2242,16 @@ parseConfig()
     echo "config file ${configFile} not found!, skipping..."
   fi
 
-  #then, parse the options as theya override the optionf from file
-  for ((i=0;i<${#args[@]};i++)) ;do
-    local var="${args[i]%%=*}"
-    local value="${args[i]#*=}"
-    echo exporting ${var}="${value}"
+  #then, parse the options as they override the options from file
+  for opt in "${args[@]}"; do
+    if [[ ! "${opt}" =~ .*=.* ]]; then
+      echo "badly formatted option ${var}, should be: option=value, stopping..."
+      return 1
+    fi
+    local var="${opt%%=*}"
+    local value="${opt#*=}"
+    echo "${var} = ${value}"
     export ${var}="${value}"
-    shift
   done
 
   #do some checking