Skip to content

Commit 6cdaefd

Browse files
artempyanykhpostmodern
authored andcommitted
Fix chruby-exec sourcing chruby.sh
chruby-exec works as follows: 1. test for presence of chruby with `command -v chruby >/dev/null` 2. source `chruby.sh` if chruby is not loaded 3. execute `chruby $ruby && $command` in a subshell The problem is that sourced functions, unlike environmental variables, are not 'inherited' by subshells. (It is true at least in Ubuntu 12.04 LTS, where I tested this) With "basic setup" you copy `chruby.sh` to `/etc/profile.d`, and this `chruby.sh` sources `/usr/share/local/chruby/chruby.sh` Then, when you invoke `chruby_exec` it works just fine, because `/usr/share/local/chruby/chruby.sh` is sourced automaticaly by bash through `/etc/profile` initialization script (which sources `/etc/profile.d/chruby.sh`) It would be great if you consider moving the process of sourcing `/usr/share/local/chruby/chruby.sh` from the top of `chruby_exec` to a command executed by a subshell. It would allow to use `chruby_exec` without needing to source `/usr/local/chruby/chruby.sh` with shell init scripts (`/etc/profile.d/chruby.sh`) About function inheritance in a subshells You could check it with the following setup: # set_func.sh: function test_func() { 0 } # file get_func.sh: source ./set_func.sh type test_func | head -1 exec "$SHELL" -i -l -c "type test_func | head -1" and then: $ ./get_func.sh test_func is a function bash: type: test_func: not found
1 parent ef054dc commit 6cdaefd

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

bin/chruby-exec

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#!/usr/bin/env bash
22

3-
source "${0%/*}/../share/chruby/chruby.sh"
4-
53
case "$1" in
64
-h|--help)
75
echo "usage: chruby-exec RUBY [RUBYOPTS] -- COMMAND [ARGS...]"
@@ -33,7 +31,9 @@ if (( $# == 0 )); then
3331
exit 1
3432
fi
3533

36-
command="chruby $(printf "%q " "${argv[@]}") && $(printf "%q " "$@")"
34+
chruby_sh="${0%/*}/../share/chruby/chruby.sh"
35+
source_command="command -v chruby >/dev/null || source $chruby_sh"
36+
command="$source_command; chruby $(printf "%q " "${argv[@]}") && $(printf "%q " "$@")"
3737

3838
if [[ -t 0 ]]; then exec "$SHELL" -i -l -c "$command"
3939
else exec "$SHELL" -l -c "$command"

0 commit comments

Comments
 (0)