Today I needed to execute a ruby gem executable with sudo
. But, surprisingly, bash would tell me command not found
for the gem that ran lovely without sudo
.
Gem bin
s are installed to /var/lib/gems/1.8/bin
, which is not in sudo’s PATH
. Unfortunately, you can’t change the path, since sudo
for Ubuntu is compiled with the --with-secure-path
option.
#Solution A: symlink the gems (if you need only some few gems)
- for each gem you need for
sudo
, run `ln -s /var/lib/gems/1.8/bin/gem_for_sudo /usr/local/bin/gem_for_sudo
#Solution B: update the path where gem install
puts executables (if you need to execute many to all gems with sudo)
- move all the bins in
/var/lib/gems/1.8/bin/
to/usr/local/bin/
(sogem
will still be aware of them) - edit or create ~/.gemrc and make sure there’s a line reading
^
gem: --bindir /usr/local/bin
#Solution C: overwrite sudo’s secure path anyway
I discourage to do this:
- run
sudo visudo
- add the line
^
Defaults secure_path=:
Posted by Dominik Schöler to makandra dev (2011-05-18 09:51)