Php Ubuntu终端上未检测到composer供应商/bin文件

Php Ubuntu终端上未检测到composer供应商/bin文件,php,bash,ubuntu,composer-php,behat,Php,Bash,Ubuntu,Composer Php,Behat,昨天我刚刚在我的VM Ubuntu 15.10上安装了带有Behat的Laravel。 一切正常,运行命令$vendor/bin/behat--init成功创建了features/文件夹 但是今天有些奇怪,当运行$vendor/bin/behat时,它说vendor/bin/behat:line 1:../behat/behat/bin/behat:没有这样的文件或目录 供应商/bin/behat文件中有什么? 第一行。/behat/behat/bin/behat 访问实际位置可以使用$vend

昨天我刚刚在我的VM Ubuntu 15.10上安装了带有Behat的Laravel。 一切正常,运行命令
$vendor/bin/behat--init
成功创建了
features/
文件夹

但是今天有些奇怪,当运行
$vendor/bin/behat
时,它说
vendor/bin/behat:line 1:../behat/behat/bin/behat:没有这样的文件或目录

供应商/bin/behat
文件中有什么? 第一行
。/behat/behat/bin/behat

访问实际位置可以使用
$vendor/behat/behat/bin/behat
,这基本上意味着
文件确实存在


请注意,对于
供应商/bin
中的文件,如
条令
phpspec
等,问题是相同的。

您遇到了相对路径问题。如果当前目录包含
vendor/
,并且您执行
vendor/bin/behat
,则
。/behat/behat/bin/behat
不存在,因为它将从当前目录向上移动一个目录,而不是
vendor/bin/
。例如:

$ cd $HOME/project
$ vendor/bin/behat
vendor/bin/behat: line 1: ../behat/behat/bin/behat: No such file or directory
该相对路径变为
$HOME/project/behat/behat/bin/behat
,而不是
$HOME/project/vendor/behat/behat/bin/behat
(注意
第二条路径中存在供应商

执行
行为时,您需要在
供应商/bin/
内:

$ cd $HOME/project/vendor/bin
$ behat
...
然而,我不认为这是最新的
behat
install的问题,它是一个结构良好的shebang。我想你可能想毁掉你的
供应商
安装、更新composer等等。这些文件不应以相对路径开头

编辑:


根据composer文档,如图所示。您可以通过运行
ls-l vendor/bin
(所有符号链接都将有一个
->
指向其目标路径)来验证这一点。看起来您原来的
php composer.phar require…
从一开始就已损坏。

是的,实际上我通过删除供应商文件夹和composer.lock,然后再次发布composer安装解决了问题。有趣的是,vendor/bin/*中的文件不包含相对路径,而是它们所指向的实际代码。例如,Vendor/bin/behat与Vendor/behat/behat/bin/behat的内容相同。有什么想法吗?@Daskul-根据作曲家的记录,是的。您可以通过运行
ls-l vendor/bin
(所有符号链接都将有一个
->
指向其目标路径)来验证这一点。看起来您原来的
php composer.phar require…
从一开始就已损坏。如果您感到好奇,下面是composer安装二进制文件中的内容。我明白了。你能把它加到你的答案上吗?这样我就可以接受了