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