如何在 WSL 2 中解决 "bash: vendor/bin/grumphp: Permission denied"?

How to solve "bash: vendor/bin/grumphp: Permission denied" in WSL 2?

docker-compose my-app up -d && docker-compose my-app exec app bash,然后 vendor/bin/grumphp run 在我的项目在 Windows 文件系统上工作。然后我(为了速度)

现在:

vendor/bin/grumphp run # bash: vendor/bin/grumphp: Permission denied

我也在类似的问题中尝试 php vendor/bin/grumphp run 作为 suggested,它有点管用,但不是真的:

Running task 1/6: phpcs... ✘
Running task 2/6: phplint... ✘
Running task 3/6: phpmd... ✘
Running task 4/6: phpstan... ✘
Running task 5/6: phpversion... ✔
Running task 6/6: yamllint... ✔
             ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
           ▄▄▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
         ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▄
        ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
       ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
  ▄███▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
 █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
 ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
   ▀█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▌
     ▀▀▓▓▓▓▓▓▓▓▓▓▓▓█▀▀▀▀▀▀▀▀▀▀▀▀▀▀████████████▄
      ▄███████                       ██████████
     ███████▀  ▀▀▀▀▀▄      ▄▀▀▀▀▀     █████ ▀
      ▐████      ▐██        ▐██        ████▌
      ████▌                            ███
       ▌██▌           ▄▄ ▄▄           ▐███
        ███       ▄▄▄▄▄▄▄▄▄▄▄▄       ▐███
         ██▄ ▐███████████████████████████
        █▀███████████▀     ▀▀███████████
          ██████████▄███████▄███████████
         ▐█████████████████████████████
          █████████████████████████████
           ██ █████████████████████▐██▀
            ▀ ▐███████████████████▌ ▐▀
                ████▀████████▀▐███
                 ▀█▌  ▐█████  ██▌
                        ██▀   ▐▀

       ██████████████████████████████████
       █░░░░░░▀█▀░░░░░░▀█░░░░░░▀█▀░░░░░▀█
       █░░▐█▌░░█░░░██░░░█░░██░░░█░░░██░░█
       █░░▐█▌░░█░░░██░░░█░░██░░░█░░░██░░█
       █░░▐█▌░░█░░░██░░░█░░░░░░▄█░░▄▄▄▄▄█
       █░░▐█▌░░█░░░██░░░█░░░░████░░░░░░░█
       █░░░█░░░█▄░░░░░░▄█░░░░████▄░░░░░▄█
       ██████████████████████████████████


phpcs
=====

The executable for "phpcs" could not be found.

phplint
=======

The executable for "parallel-lint" could not be found.

phpmd
=====

The executable for "phpmd" could not be found.

phpstan
=======

The executable for "phpstan" could not be found.
To skip commit checks, add -n or --no-verify flag to commit command

如何正确解决我的问题?

我不太喜欢使用 sudo chmod,但现在 任何 可行的解决方案都可以。

嗯,“权限被拒绝”应该是一个明显的线索,但我们到了。

  1. 转到容器上的 bash。它将在您的项目的根目录下打开,这可能是 /var/www/.

  2. 使用ls -la ./vendor/bin/列出所有二进制文件并检查它们是否可执行以及是否拥有正确的所有者。第一列中的值类似于 -rwxr-xr-x。您可以忽略第一位,后面是三组三位。第一组告诉您用户所有者的权限,第二组告诉您组所有者的权限,第三组告诉您所有其他人的权限。在每一组中,第一位告诉您文件是否可读,第二位表示文件是否可写,第三位表示文件是否可执行。第三个值 第四列分别告诉您用户和组所有者。

  3. 使用 chmod +x ./vendor/bin/<file> 使文件可执行,并使用 chown 1000:1000 ./vendor/bin/<file> 更改其所有者。替换为以下各项:grumphpphpmdphpstanphpunit and/or 您需要的任何其他内容。