Use array to pass in env, preserving spaces
authorSam Saffron <sam.saffron@gmail.com>
Thu, 16 Jan 2014 04:34:54 +0000 (20:34 -0800)
committerSam Saffron <sam.saffron@gmail.com>
Thu, 16 Jan 2014 04:34:54 +0000 (20:34 -0800)
launcher

index 7b107a1974a41a3b0331c4f790f1b4a4a8bf80d9..851ad4cc612b73f60c526ed9ba9287280193b9f0 100755 (executable)
--- a/launcher
+++ b/launcher
@@ -88,11 +88,17 @@ set_template_info() {
         p e
        end
     end
-    puts env.map{|k,v| "-e #{k}=#{v}" }.join(" ")
+    puts env.map{|k,v| "-e\n#{k}=#{v}" }.join("\n")
 RUBY
 
-    env=`exec echo "$input" | docker run -rm -i -a stdin -a stdout $image ruby -e "$env_ruby"`
-    echo "Calculated ENV: $env"
+    raw=`exec echo "$input" | docker run -rm -i -a stdin -a stdout $image ruby -e "$env_ruby"`
+
+    env=()
+    while read i; do
+      env[${#env[@]}]=$i
+    done <<< "$raw"
+
+    echo "Calculated ENV: ${env[@]}"
 }
 
 [ -z $docker_path ] && {
@@ -135,7 +141,7 @@ case "$command" in
       fi
       run_command="$run_command /pups/bin/pups --stdin"
 
-      (exec echo "$input" | docker run $env -e DOCKER_HOST_IP=$docker_ip -cidfile $cidbootstrap -i -a stdin -a stdout -a stderr $volumes $image \
+      (exec echo "$input" | docker run "${env[@]}" -e DOCKER_HOST_IP=$docker_ip -cidfile $cidbootstrap -i -a stdin -a stdout -a stderr $volumes $image \
          /bin/bash -c "$run_command") \
          || (docker rm `cat $cidbootstrap` && rm $cidbootstrap)
 
@@ -205,7 +211,7 @@ case "$command" in
              exit 1
            fi
 
-           docker run $env -e DOCKER_HOST_IP=$docker_ip -name $config -cidfile $cidfile $ports \
+           docker run "${env[@]}" -e DOCKER_HOST_IP=$docker_ip -name $config -cidfile $cidfile $ports \
                       -d $volumes $local_discourse/$config /usr/bin/runsvdir -P /etc/service
 
            exit 0