Linux Bash“|”运算符不起作用-我做错了什么?

Linux Bash“|”运算符不起作用-我做错了什么?

我正在尝试通过这样的登录命令检查用户密码:

# 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

相关内容