Linux passwd命令:格式化输出

时间:2015-09-24 11:36:31

标签: linux bash stdout stderr passwd

我有这个脚本,用户可以使用passwd透明地更改其密码。脚本本身由root执行,用

启动它
su - <user> -c "script"

我知道启动脚本的方式可能不是很安全,但事实就是这样,我没有改变那部分的优势。

我的问题是,在调用时,passwd显示以下内容:

Changing password for user <user>.
Changing password for <user>
current (UNIX) password:
New UNIX password:
Retype new UNIX password:

这里有几点需要注意:

  1. 为什么它甚至以两条线开头?看来第一个是在root调用passwd时显示的,第二个是在调用passwd时自己显示的。它可以作为解释的开始吗?
  2. 我需要从这些提示中过滤掉一些单词。我想过一个接一个地使用greps和seds的组合,但这里就是诀窍:两条第一条线似乎被输出到stdout,但其他线条则是stderr。当我尝试将stderr重定向到stdout来处理它时,不再显示任何内容。
  3. 有没有人对这种情况有任何答案或提示?非常感谢。

    (这里的第一个问题,请不要犹豫,询问更多信息。)

1 个答案:

答案 0 :(得分:0)

尝试键控:

su - vartaghan -c passwd

进入命令行,然后将其与键控进行对比:

passwd

到命令行。

答案就在那里。因为您使用su来实现命令,所以需要输入密码,然后passwd命令变为活动状态,这需要重新密码。
您最好的选择是通过简单地发出menu命令来更改为您的用户运行的passwd的方式,启动此密码更改shell。

编辑: 如果你想摆脱I / O使用类似的东西:

(echo $1; echo $2; echo $2) | passwd &>/dev/null

这要求您将脚本作为myscript oldpassword newpassword

运行