Вчера я только что установил Laravel с Behat на моем VM Ubuntu 15.10. Все работает нормально, выполнение команды $ vendor/bin/behat --init
успешно создало features/
папку
но сегодня что-то странно, при запуске $ vendor/bin/behat
его говорит vendor/bin/behat: line 1:../behat/behat/bin/behat: No such file or directory
Что внутри файла vendor/bin/behat
? Эта первая единственная строка ../behat/behat/bin/behat
доступ к фактическому местоположению работает $ vendor/behat/behat/bin/behat
что в основном означает, что file DOES exists
Обратите внимание, что проблема одинакова для файлов в vendor/bin
таких как doctrine
phpspec
т.д.
У вас проблемы с относительным пути. Если ваш текущий каталог содержит vendor/
и вы выполняете vendor/bin/behat
, то ../behat/behat/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
(обратите внимание, что vendor
присутствует во втором пути)
Вы должны находиться внутри vendor/bin/
при выполнении behat
:
$ cd $HOME/project/vendor/bin
$ behat
...
Тем не менее, я не вижу, что это проблема с последней установкой behat
, строка # 1 - хорошо сформированная shebang. Я думаю, вы можете захотеть уничтожить установку своего vendor
, обновить композитор и т.д. И переустановить Behat. Эти файлы не должны начинаться с относительных путей.
РЕДАКТИРОВАТЬ:
Согласно документам композитора, он создает символические ссылки на бинарные файлы пакетов, как показано в исходном коде. Вы можете проверить это, запустив ls -l vendor/bin
(все символические ссылки будут иметь a ->
указывающие на их путь назначения). Казалось бы, ваш оригинальный php composer.phar require...
был испорчен с самого начала.
ls -l vendor/bin
(все символические ссылки будут иметь->
указывая на путь их назначения). Казалось бы, ваш оригинальныйphp composer.phar require ...
был поврежден с самого начала.