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

在Bash脚本中执行sudo命令时如何隐藏所有输出(含密码提示)

解决sudo -S仍显示密码提示的问题

你遇到的问题是因为[sudo] password for username:这个提示是sudo程序本身输出到标准错误(stderr)的,而你原来的重定向只针对后面的cp命令,并没有覆盖sudo自己的错误输出。这里有两个简单的解决方法:

方法1:重定向sudo的标准错误流

把重定向操作直接应用到整个sudo命令上,这样就能把sudo的提示信息也丢到/dev/null里:

echo "mypassword" | sudo -S cp -u /scripts/.bashrc ~/ 2>/dev/null

如果同时想隐藏cp命令的标准输出和错误,可以写成:

echo "mypassword" | sudo -S cp -u /scripts/.bashrc ~/ >/dev/null 2>&1

这样整个sudo+cp组合的所有输出(包括sudo的提示)都会被丢弃。

方法2:让sudo不输出密码提示

sudo提供了-p参数,可以自定义密码提示字符串。我们可以把它设为空字符串,这样sudo就不会输出任何提示了:

echo "mypassword" | sudo -S -p "" cp -u /scripts/.bashrc ~/ >/dev/null 2>&1

这个方法更直接,从根源上阻止了提示信息的产生。


关于安全的补充

正如你提到的,把明文密码写在脚本里确实不是最安全的做法。即使是内部服务器,也建议:

  • 把包含密码的脚本权限设置为chmod 600 your_script.sh,确保只有你自己能读取
  • 考虑使用sudoers文件配置免密执行特定命令(比如给你的用户授权无需密码执行cp /scripts/.bashrc ~/),这样完全不需要在脚本里写密码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:42:46