You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bash脚本中执行sudo -i命令遇终端中断问题求助

配置脚本中sudo -i相关问题的解决办法

为什么sudo -i会中断脚本

sudo -i的作用是启动一个交互式root登录shell,运行这个命令后,脚本会暂停执行,直到你手动退出这个shell才会继续,并非真的“终止”脚本。

最优解决方式:直接给目标命令加sudo

既然你的脚本已经能无密码使用sudo,完全没必要先切换root shell。直接在脚本里写:

echo 'blacklist r8188eu' | sudo tee -a '/etc/modprobe.d/realtek.conf'

tee -a需要root权限才能写入/etc目录下的文件,用sudo前缀直接给这个命令授权,不会打断脚本的执行流程,这是最简洁高效的方案。

sudo su环境下的操作注意

如果已经通过sudo su切换到了root身份(终端提示符显示#):

  • 直接执行目标命令就行,不用加sudo:
    echo 'blacklist r8188eu' | tee -a '/etc/modprobe.d/realtek.conf'
    
  • 此时再跑sudo -i完全没必要,而且同样会弹出交互式shell,导致脚本卡住。这不算“错误”,但属于多余操作,没有任何意义。

关于sudo su和sudo -i的差异

  • sudo su:切换到root身份,但保留当前用户的环境变量(比如$HOME还是原用户的目录)
  • sudo -i:模拟root用户完整登录流程,加载root的环境变量($HOME变为/root),默认启动交互式shell

但对你的需求来说,这两个命令都不是必需的,直接给单个命令加sudo才是最合理的选择。

内容的提问来源于stack exchange,提问作者Honey Honey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:15:51