.sh脚本执行/usr/bin/mount及sudo命令报未找到错误的求助
故障根源
你遇到的找不到mount、甚至找不到sudo的报错,根本不是系统里真的缺这些命令——是脚本第一行的最开头藏了个肉眼根本看不见的UTF-8 BOM字符。
仔细看你贴的报错内容:系统提示找不到的程序路径是/usr/bin/mount,路径最前面那个小隐形标记就是BOM。shell解析脚本的时候会把这个隐形字符当成命令路径的一部分,实际要找的是带了非法前缀的路径,自然会报“not found”。哪怕你在mount前面加sudo,只要这个BOM还在,整行命令都会带着这个隐形前缀,照样报找不到命令的错。
这个问题基本都是编辑脚本的时候用了会默认添加BOM的Windows编辑器(比如系统自带记事本)导致的,Linux的shell解析器完全不认这个隐形标记,直接把它当普通字符串拼在命令上了。
排查&解决方法
- 先实锤确认问题:在终端执行
cat -A /home/patrick/Scripts/DataBackup.sh,如果第一行最开头显示M-oM-;M-?,就肯定是BOM搞的鬼。 - 移除BOM的两种常用操作:
- 直接用Linux自带的编辑器(nano、vim都可以)打开脚本,把第一行最开头的隐形字符删掉再重新保存,以后编辑shell脚本尽量别用会自动加BOM的跨平台编辑器。
- 也可以直接跑一条命令把文件开头的BOM去掉:
sed -i '1s/^\xEF\xBB\xBF//' /home/patrick/Scripts/DataBackup.sh
- 顺手补个小提醒:规范的可执行shell脚本,建议在最开头加上对应解释器的shebang声明(比如
#!/bin/bash),避免不同默认shell带来的兼容问题;记得给脚本加执行权限:chmod +x /home/patrick/Scripts/DataBackup.sh
内容的提问来源于stack exchange,提问作者Lucens
相关产品推荐
相关产品推荐

