Linux Bash "|" 运营商不工作 - 我做错了什么?

use*_*702 1 linux bash bash-scripting

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

# echo "name\npassword" | login  
Run Code Online (Sandbox Code Playgroud)

但命令结束时没有写任何东西。echo由于 SIGPIPE 而结束。为什么login在要求名称和密码之前停止?

当我对passwd命令执行相同操作时,它可以工作:

# echo "password\npassword" | passwd  
Enter new UNIX password: 
Retype new UNIX password:
passwd: password updated successfully 
Run Code Online (Sandbox Code Playgroud)

我有 Ubuntu 12.04 和 Bash 4.2.25

mta*_*tak 9

login 命令从终端读取输入,而不是通过管道 (STDIN) 接受它作为输入。

如果要编写脚本login,可以使用该expect实用程序:

#!/usr/bin/expect

spawn "login"

expect "login:" { send "mtak\r" }
expect "Password:" { send "mypassword\r" }

interact
Run Code Online (Sandbox Code Playgroud)

将此粘贴到文件中,运行chmod +x script.ex并运行它./script.ex