根据“grep”输出终止命令?

根据“grep”输出终止命令?

我们有一个命令行界面来登录系统,如下所示:

$ 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 登录尝试。

相关内容