我正在尝试通过这样的登录命令检查用户密码:
# echo "name\npassword" | login
但命令结束时没有写入任何内容。echo
由于 SIGPIPE 而结束。为什么login
在询问姓名和密码之前就停止了?
当我使用命令执行相同操作时passwd
,它有效:
# echo "password\npassword" | passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
我有 Ubuntu 12.04 和 Bash 4.2.25
答案1
登录命令从终端读取输入,而不是通过管道(STDIN)接受输入。
如果您想要编写脚本,login
可以使用以下expect
实用程序:
#!/usr/bin/expect
spawn "login"
expect "login:" { send "mtak\r" }
expect "Password:" { send "mypassword\r" }
interact
将其粘贴到文件中,chmod +x script.ex
然后运行./script.ex