我们有一个命令行界面来登录系统,如下所示:
$ cli -u username -p password
如果提供了错误的密码,我们收到的消息是“凭据不正确”,然后它会等待输入正确的密码并且不会退出。如果提供了正确的密码,则不会提供任何消息并直接登录。
我希望在密码错误时终止命令,而不是等待用户输入。
这个想法是寻找关键字 Credentials,如果找到则终止命令:
$ cli -u username -p password | grep Credentials
我该怎么做呢?
答案1
背景
我对你的cli
实用程序进行了建模,如下所示:
$ cat cli
#!/bin/bash
while IFS= read -r line; do
if [ "$line" == "password" ]; then
break
else
echo 'Credentials incorrect'
fi
done
使用grep
然后,您可以grep -m1 ...
在找到第一个匹配项后使用“突破”。该-m1
方法在第一场比赛后停止。
$ ./cli | grep -m 1 "Credential"
blah
Credentials incorrect
$
好密码
$ ./cli | grep -m 1 "Credential"
password
$
使用sed
类似的方法使用sed
:
$ ./cli | sed '/Credential/ q'
blah
Credentials incorrect
$
好密码
$ ./cli | sed '/Credential/ q'
password
$
答案2
您可以检查类似的内容,而不是终止进程断开连接前尝试在配置文件中。我通常会这样做来限制 ssh 登录尝试。