Commit 6cdaefd
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 found1 parent ef054dc commit 6cdaefd
1 file changed
Lines changed: 3 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | | - | |
5 | 3 | | |
6 | 4 | | |
7 | 5 | | |
| |||
33 | 31 | | |
34 | 32 | | |
35 | 33 | | |
36 | | - | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
| |||
0 commit comments