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

如何在终端中通过-S(stdin)传递密码?报错问题求解

解决通过stdin传递sudo密码时出现命令未找到的问题

你遇到的问题根源是:sudo -S 读取完echo输出的密码完成认证后,会把这行密码继续传递给后面su启动的bash进程,bash把它当成命令执行,所以才会报错“myPassword: command not found”。

给你两种可行的解决办法:

  • 方法一:直接用sudo切换用户(推荐)
    不需要嵌套su,sudo本身支持直接指定用户执行shell,命令如下:

    echo 'myPassword' | sudo -S -u userName /bin/bash
    

    这样sudo会直接以userName的身份启动bash,不会出现多余输入被当成命令执行的问题。

  • 方法二:重定向su的输入到/dev/null
    如果一定要保留su的写法,就把su的标准输入重定向到空设备,避免它读取到密码内容:

    echo 'myPassword' | sudo -S su - userName -s /bin/bash < /dev/null
    

另外提醒一句:明文在命令行输入密码存在安全风险,建议尽量避免这种方式,比如配置sudo免密(修改/etc/sudoers文件,添加yourUser ALL=(userName) NOPASSWD: /bin/su - userName -s /bin/bash这类规则,注意用visudo编辑)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:07:01