diff --git a/bin/foreman-runner b/bin/foreman-runner index 2e73701..32b20c4 100755 --- a/bin/foreman-runner +++ b/bin/foreman-runner @@ -1,6 +1,6 @@ -#!/bin/sh +#!/bin/bash # -#/ Usage: foreman-runner [-d ] [...] +#/ Usage: foreman-runner [-d ] [-p] [...] #/ #/ Run a command with exec, optionally changing directory first @@ -16,9 +16,12 @@ usage() { exit } -while getopts ":hd:" OPT; do +read_profiled="" + +while getopts ":hd:p" OPT; do case $OPT in d) cd "$OPTARG" ;; + p) read_profiled="1" ;; h) usage ;; \?) error "invalid option: -$OPTARG" ;; :) error "option -$OPTARG requires an argument" ;; @@ -29,4 +32,13 @@ shift $((OPTIND-1)) [ -z "$1" ] && usage +if [ "$read_profiled" == "1" ]; then + shopt -s nullglob + for script in .profile.d/*; do + echo "sourcing $script" + source $script + done + shopt -u nullglob +fi + exec "$@" diff --git a/data/example/.profile.d/foo.sh b/data/example/.profile.d/foo.sh new file mode 100644 index 0000000..b15710a --- /dev/null +++ b/data/example/.profile.d/foo.sh @@ -0,0 +1,2 @@ +#!/bin/sh +export FOO=bar diff --git a/lib/foreman/process.rb b/lib/foreman/process.rb index fe5c944..fd17928 100644 --- a/lib/foreman/process.rb +++ b/lib/foreman/process.rb @@ -43,23 +43,20 @@ class Foreman::Process Process.spawn env, expanded_command, :out => output, :err => output end elsif Foreman.jruby? - Dir.chdir(cwd) do - require "posix/spawn" - POSIX::Spawn.spawn env, command, :out => output, :err => output - end + require "posix/spawn" + wrapped_command = "#{Foreman.runner} -d '#{cwd}' -p -- #{command}" + POSIX::Spawn.spawn env, wrapped_command, :out => output, :err => output elsif Foreman.ruby_18? - Dir.chdir(cwd) do - fork do - $stdout.reopen output - $stderr.reopen output - env.each { |k,v| ENV[k] = v } - exec command - end + fork do + $stdout.reopen output + $stderr.reopen output + env.each { |k,v| ENV[k] = v } + wrapped_command = "#{Foreman.runner} -d '#{cwd}' -p -- #{command}" + exec wrapped_command end else - Dir.chdir(cwd) do - Process.spawn env, command, :out => output, :err => output - end + wrapped_command = "#{Foreman.runner} -d '#{cwd}' -p -- #{command}" + Process.spawn env, wrapped_command, :out => output, :err => output end end @@ -96,7 +93,7 @@ class Foreman::Process private def cwd - @options[:cwd] || "." + File.expand_path(@options[:cwd] || ".") end end