打开新xterminal或启动bash时两次出现sudo错误的排查求助
我遇到过好几个类似的问题,你已经用bash -v开启verbose模式,这步找问题的方向非常对!接下来可以按这些步骤精准定位:
锁定bash -v输出里的错误触发点
仔细看bash -v的输出内容,错误提示会紧跟在导致问题的命令后面,找到那行调用sudo的语句,看它属于哪个脚本(输出里会显示正在加载的脚本路径),这是最直接的定位方式。排查所有bash启动加载的脚本(不止~/.bashrc)
bash启动时会根据不同模式加载不同配置,别只盯着~/.bashrc:- 登录shell(比如远程ssh登录)会加载
/etc/profile、~/.bash_profile、~/.bash_login、~/.profile - 交互式非登录shell(比如xterminal新开的窗口)会加载
/etc/bash.bashrc和~/.bashrc,还要注意~/.bashrc里有没有用source或.调用其他脚本(比如~/.bash_aliases、自定义的环境脚本),这些被调用的文件也要检查 - 全局配置目录
/etc/profile.d/下的所有脚本也可能是源头,很多发行版会把第三方工具的配置放这
- 登录shell(比如远程ssh登录)会加载
全局搜索用户目录下的非注释sudo命令
用这条命令快速扫一遍所有shell相关文件里的非注释sudo语句:grep -r --include=".*sh" --include="*.sh" -v "^#" "sudo" ~/这条命令会递归搜索你的用户目录下所有隐藏的shell配置文件(比如
.bashrc)和.sh脚本,排除掉以#开头的注释行,直接列出所有实际执行的sudo命令所在的文件和行号。检查异常的环境变量配置
有些奇怪的sudo调用可能藏在环境变量里,比如PROMPT_COMMAND(这个变量里的命令会在每次显示命令提示符前执行),先看看它的内容:echo $PROMPT_COMMAND也可以用
env命令输出所有环境变量,排查有没有异常的变量值里包含sudo。用干净模式验证问题来源
启动一个完全不加载配置文件的bash:bash --noprofile --norc如果这时候没有sudo错误提示,说明肯定是某个启动脚本的问题。接下来可以逐个加载配置文件测试,比如先只加载全局profile:
bash --rcfile /etc/profile,或者只加载自己的bashrc:bash --rcfile ~/.bashrc,这样一步步缩小范围找到出问题的文件。
内容的提问来源于stack exchange,提问作者user unknown

