关于passwd --stdin命令及相关管道用法的技术疑问
关于
passwd --stdin命令及相关管道用法的技术疑问 嗨,这个问题问得太戳点了!我来给你掰扯清楚这里面的门道~
首先得搞懂passwd --stdin这个参数的核心逻辑:它的设计目的就是让passwd命令从标准输入(也就是stdin)读取密码,彻底跳过交互式手动输入密码的环节——这在写自动化脚本的时候特别实用,不用每次都手动敲密码确认。
那为啥直接敲passwd --stdin password没效果呢?
- 这里的
password其实是你要修改密码的目标用户名(如果省略这个参数,默认是修改当前登录用户的密码),根本不是你要设置的密码内容。 - 当你加上
--stdin参数后,passwd会立刻进入“等待标准输入”的状态,它不会去读取命令行后面的参数当作密码。这时候如果没有管道给它传内容,它就会一直卡在那儿等你手动输入密码,直到你敲回车结束,所以看起来像是“没工作”。
那echo p的作用就很明显了:
echo p会把字符p输出到自己的标准输出里,然后通过管道|把这个输出直接转成passwd --stdin password的标准输入。这样passwd就能从stdin里读到p,把它当作用户password的新密码,整个过程自动完成,完全不用交互式输入。
顺带提一句:不过这种直接用echo传密码的方式有个安全隐患——密码会被记录在命令历史里,生产环境里一般会用更安全的方式,比如用printf "%s\n" "your-password"或者从加密文件读取,但这就是另外的话题啦~
备注:内容来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

