我需要用一行来更改密码,其中也包含 sudo。
我知道您可以像这样回显 sudo 密码:
echo "password" | sudo -S {command}
我可以像这样更改密码:
echo "user:passwd" | sudo chpasswd
我尝试了以下操作,但回声似乎没有正确执行:
echo "root_password" | echo "user:passwd" | sudo -S chpasswd
并且这有效但挂在提示上:
echo "root_password\nuser:passwd" | sudo -S chpasswd
正确执行该命令的正确组合是什么?
答案1
您必须使用嵌套外壳,因为您不能像那样堆叠管道:
echo "root_password" | sudo -S sh -c 'echo "user:passwd" | chpasswd'
保持echo "root_password" | sudo -S
不变,唯一改变的是我们在 sudo 内部创建了一个新的 shell ( sh
),它将字符串文字作为命令运行 ( -c 'echo "user:passwd" | chpasswd'
)。
答案2
只需使用echo password | sudo passwd --stdin username
。