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

如何在RedHat Bash脚本中切换至root执行指定命令

在RedHat Bash脚本中切换root执行命令的解决方法

推荐方案:使用sudo(安全且灵活)

su命令需要交互式输入密码,且直接切换shell会导致脚本后续逻辑中断,更安全的方式是用sudo给普通用户授权执行特定root命令:

  1. 编辑sudo配置文件(必须用visudo,避免语法错误导致sudo失效):
    visudo
    
  2. 在文件末尾添加一行,授权你的普通用户无需密码执行vgdisplay命令(替换your_username为实际用户名):
    your_username ALL=(ALL) NOPASSWD: /sbin/vgdisplay
    
  3. 保存退出后,脚本里直接调用sudo执行目标命令:
    # 普通用户逻辑...
    
    # 需要root权限的命令
    sudo vgdisplay -v | grep "LV Status"
    
    # 继续普通用户逻辑...
    

不推荐方案:用su结合密码输入(安全风险高)

如果必须用su,需要通过-c参数指定要执行的命令,避免进入交互式root shell:

  1. 明文密码方式(强烈不建议,密码易泄露):
    echo "your_root_password" | su - root -c "vgdisplay -v | grep 'LV Status'"
    
  2. 用expect自动输入密码(仍需明文密码,需先安装expect):
    先安装expect:
    sudo yum install -y expect
    
    脚本中添加:
    expect << EOF
    spawn su - root -c "vgdisplay -v | grep 'LV Status'"
    expect "Password:"
    send "your_root_password\r"
    expect eof
    EOF
    

为什么原脚本root部分没执行?

你直接写su - root会启动一个全新的root登录shell,脚本会卡在这个交互界面,不会继续执行后续命令。必须用su - root -c "命令"的形式,让su执行完指定命令后立即返回原用户shell,脚本才能继续运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:27:31