Xubuntu LTS 16.04无法识别bash脚本:touchpad.sh执行报错文件不存在
解决
sudo touchpad.sh提示文件不存在的问题 嘿,我来帮你排查这个困扰你的问题!你遇到的用sudo执行脚本时提示文件不存在,但单独跑命令正常的情况,基本都是路径、权限或者环境差异导致的,咱们一步步来解决:
可能的原因及解决办法
1. sudo的工作目录和普通用户不一致
当你用普通用户在某个目录下执行./touchpad.sh时,脚本在当前目录能找到,但sudo切换到root身份后,默认的工作目录可能变成了/root,自然找不到你的脚本。
- 解决办法:用绝对路径执行脚本,比如:
或者先切换到脚本所在目录再执行:sudo /home/your_username/path/to/touchpad.shcd /path/to/script/directory sudo ./touchpad.sh
2. 脚本缺少可执行权限
如果你平时是用bash touchpad.sh来运行脚本,那不需要可执行权限,但sudo touchpad.sh是直接调用脚本运行,必须要有可执行权限。
- 解决办法:给脚本添加可执行权限:
chmod +x touchpad.sh
3. root的PATH环境变量不包含脚本所在目录
如果你把脚本放在普通用户PATH包含的目录(比如~/bin),但root的PATH里没有这个目录,直接输入sudo touchpad.sh就会找不到文件。
- 解决办法:
- 要么用绝对路径执行(参考第一条);
- 要么把脚本移到root也能访问的系统级目录,比如
/usr/local/bin; - 或者执行时加上
./明确指定当前目录的脚本。
4. 脚本的shebang行错误
脚本第一行的shebang(比如#!/bin/bash)如果写错了路径,sudo执行时会因为找不到解释器而报错“文件不存在”(这个错误提示有时候会误导人)。
- 解决办法:
- 先确认你的bash路径:
which bash - 把脚本第一行改成正确的路径,比如:
#!/bin/bash
- 先确认你的bash路径:
快速验证脚本逻辑
如果暂时不想折腾权限和路径,你可以直接用sudo调用bash来运行脚本,这样能跳过可执行权限和PATH的限制,先确认脚本本身逻辑没问题:
sudo bash touchpad.sh
内容的提问来源于stack exchange,提问作者Josh Lowy
相关产品推荐
相关产品推荐

