sudo: pear: command not found

3

我有一台安装了雪豹系统的电脑,里面似乎已经预装了带有PEAR的PHP。我启用了PHP,但是找不到PEAR的任何迹象。因此,我安装了它,现在phpinfo()显示它已经被安装。

include_path .:/usr/lib/php/share/pear

当我输入任何pear命令时,仍然出现以下错误:

$ sudo pear

我遇到了一个错误:sudo: pear: 命令未找到。
我缺少了什么?

如果这个问题是先发布的呢? - keeg
https://meta.stackoverflow.com/questions/315472/old-question-marked-as-duplicate-of-a-new-question - Raedwald
4个回答

7
许多方法可以解决这个问题,但如果您已经安装了locate(您很可能已经安装了),我会输入以下内容:
$ locate bin/pear

这里应该列出一个或多个内容,其中一个看起来像pear的路径。假设它说的是 /usr/local/bin/pear。那么你下一条命令是:

$ sudo /usr/local/bin/pear

有两个需要注意的地方:

  1. 有可能`locate`命令会列出多个可执行的pear文件。如果是这种情况,那么根据你使用的PHP版本选择正确的文件非常重要。
  2. 你可能需要将包含`pear`的目录添加到你的`PATH`环境变量中。

这不是pear命令行二进制文件安装的目录。在终端提示符中键入“locate bin/pear”时会发生什么?我见过的每个Mac OS X安装都默认安装了Locate,所以看到你说它没有安装,我感到惊讶。如果确实没有安装,请尝试“whereis pear”。 - Trott
如果其他方法都失败了,您可以尝试 sudo /usr/local/bin/pearsudo /usr/local/php5/bin/pear。我曾经在 Mac OS X 上看到 pear 出现在这两个位置中的任意一个。如果您真的不知道它在哪里,但确定它在某个地方,而且您有足够的耐心,可以尝试像这样彻底但效率低下的方法:sudo find / -name pear,但是这可能需要很长时间才能运行。我建议至少准备花费数小时。我认为这只适用于非常绝望的情况。(在生产服务器上运行可能是个坏主意。) - Trott
所以Locate说:定位数据库(/var/db/locate.database)不存在。 - keeg
whearis pear返回空值,只是继续执行下一行。 - keeg
1
太棒了!现在你可以在需要使用它时始终键入 sudo /usr/lib/php/bin/pear,或者你可以按照 @hayashi-kei 的说明,但使用以下行添加:export PATH=/usr/lib/php/bin:$PATH - Trott
显示剩余9条评论

7

为了使pear命令正常工作,您需要更新系统的$PATH变量。使用以下命令编辑bash profile文件(如果您有textmate):

mate ~/.bash_profile

并且添加这一行:

export PATH=/usr/local/pear/bin:$PATH

重新加载终端,然后它应该可以正常工作了。
编辑:感谢trott指出我的错误。我已经更改了路径以定位bin应该大致在哪里(取决于安装的位置)。

我有TextMate,但是当然会出现“mate命令未找到”的情况。我已经将路径添加到.bash_profile文件中,但这是一个新文件,所以可能我添加的位置不对,因为它仍然无法正常工作。 - keeg
1
我相当确定 /usr/lib/php/share/pear 不是实际命令行二进制文件的路径,因此我认为这不会起作用。include_path 是类似于 include() 和 require() 的东西所包含的 PHP 文件的位置。如果发现命令行二进制文件藏在同一目录中,那将非常令人惊讶和令人沮丧。 - Trott

2

如果您直接在 PHP 上安装了 pear(例如 MAMP),则应将 pear 复制到 /usr/local/bin

cp /php5.3.2/pear /usr/local/bin/pear

然后导出变量PATH,并在shell中测试"pear"。

0

我曾遇到类似的问题,需要在sudoers中更新secure_path,因为它会覆盖用户的$PATH。

检查sudo中的secure_path

[root@host ~]# sudo -V | grep 'Value to override'
Value to override user's $PATH with: /sbin:/bin:/usr/sbin:/usr/bin

如果$PATH被覆盖,请使用visudo并编辑/etc/sudoers。
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接