3

I have some php packages installed globally using php composer within a script

sudo -u me composer global require "phpmd/phpmd"

I want to find the path of these globally installed php packages. When I run which phpmd as user me I get the full path.

/home/me/.composer/vendor/bin/phpcs

However when I try and run the command as sudo I get nothing. I think this is because composer has been added globally and is in my user mes PATH while it is not present in sudo's PATH.

Instead I have tried

 path="$(sudo -u me which phpcs)"

But this also fails. However it succeeds for any program not installed through composer. How can I find the globally installed php packages through composer as sudo?

me's path

/home/me/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

sudo (su's) path

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
  • To troubleshoot, please show me's and root's path. That's probably where the problem is. – Julie Pelletier May 3 '16 at 16:33
  • updated the question @JuliePelletier – myol May 3 '16 at 16:42
1

The problem, as you can notice in the path difference, is that me's path includes /home/me/.composer/vendor/bin. Sudo does not inherit the user's environment.

You would need to manually import it. It's unclear why you'd want root to see a specific user's files in its path though.

To find a file, you can use the find command such as find /home -name FileName.

  • Manually import the composer path? – myol May 3 '16 at 16:49
1

Thanks to Julie's suggestion and some other answers on SO I came up with

 path="$(PATH=$PATH:/home/me/.composer/vendor/bin which phpcs)"

which works nicely

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.