php composer
我在脚本中使用全局安装了一些 php 软件包
sudo -u me composer global require "phpmd/phpmd"
我想找到这些全局安装的php包的路径。当我which phpmd
以用户身份运行时me
,我得到了完整路径。
/home/me/.composer/vendor/bin/phpcs
但是,当我尝试运行该命令时,sudo
我什么也没得到。我认为这是因为 Composer 已全局添加并在我的 user 中,me
而PATH
它不存在于 sudo 中PATH
。
相反我尝试过
path="$(sudo -u me which phpcs)"
但这也失败了。但是,对于任何未通过 Composer 安装的程序,它都会成功。如何通过composer as找到全局安装的php包sudo
?
我的路
/home/me/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
sudo (su 的) 路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
答案1
正如您在路径差异中注意到的那样,问题在于我的路径包含/home/me/.composer/vendor/bin
. Sudo 不会继承用户的环境。
您需要手动导入它。不过,尚不清楚为什么您希望 root 看到其路径中的特定用户的文件。
要查找文件,您可以使用find
诸如 之类的命令find /home -name FileName
。
答案2
感谢朱莉的建议和其他一些答案,我想出了
path="$(PATH=$PATH:/home/me/.composer/vendor/bin which phpcs)"
效果很好