首页 > ubuntu 14.04.1下无法使用gulp命令

ubuntu 14.04.1下无法使用gulp命令

执行gulp是像这样的(用户为dudu):

$ gulp
bash: /usr/local/bin/gulp: /usr/bin/env: bad interpreter: Permission denied
$ sudo gulp
sudo: unable to execute /usr/local/bin/gulp: Permission denied
$ which gulp
/usr/local/bin/gulp
$ ll /usr/local/bin/gulp 
lrwxrwxrwx 1 root root 36 Jul 19 17:30 /usr/local/bin/gulp -> ../lib/node_modules/gulp/bin/gulp.js*

我试着把/usr/local/bin/gulp文件替换为可执行的内容仅一行ls的脚本,可以直接执行的,不需要sudo。看起来需要sudo的原因在/usr/bin/env这个东西,它就是个文件夹,我已经改成了777:drwxrwxrwx 2 root root 4096 Jul 19 17:16 env,但不知为什么还是需要sudo才能执行gulp,不加sudo报错还是说/usr/bin/env: bad interpreter: Permission denied

    -rwxr-xr-x 1 dudu dudu 5384 Feb  1 04:55 /usr/local/lib/node_modules/gulp/bin/gulp.js

用dudu用户sudo执行这个文件为什么会Permission Denied呢?


正常情况下/usr/bin/env是一个可执行文件,不是文件夹。它的作用是调用当前用户环境下的指定的程序。

例如,有一个python文件a.python,里面的内容如下

#!/usr/bin/python

print('hello world')

如果a.python有执行权限,那么shell能够直接运行它,因为文件的第一行指定了python的路径。

不过在更多情况下,有时python的路径是不确定的,例如在virtuanenv的环境,每个项目都有自己的python,那么python代码第一行怎么写?如果是#!python则Shell会报错,因为shell需要一个绝对路径。

这个时候/usr/bin/env就是用来解决这个问题的,把第一行改成#!/usr/bin/env python,shell会调用/usr/bin/env来执行,因为后面跟着python这个参数,/usr/bin/env会根据PATH环境变量找到python的路径,然后调用它。

所以你提到/usr/bin/env是一个文件夹,那么你的环境可能有问题。

【热门文章】
【热门文章】