Mate o comando baseado na saída 'grep'? [fechadas]

3

Temos uma interface de linha de comando para fazer logon em um sistema assim:

$ cli -u username -p password

No caso de a senha errada ser fornecida, a mensagem que recebemos é "Credentials incorrect" (Credenciais incorretas) e, em seguida, ela aguarda a digitação correta da senha e não é encerrada. Se a senha correta for fornecida, ela não fornecerá nenhuma mensagem e fará login diretamente.

Estou procurando encerrar o comando caso a senha esteja errada, em vez de esperar pela entrada do usuário.

A ideia é procurar pela palavra-chave Credentials e, se for encontrada, então, mata o comando:

$ cli -u username -p password | grep Credentials

Como eu faria isso?

    
por Ram 24.07.2018 / 18:16

2 respostas

0

Em vez de eliminar o processo, você pode verificar algo como tenta-antes-desconecte no arquivo de configuração. O que eu costumo fazer para restringir as tentativas de login do ssh.

    
por 24.07.2018 / 22:29
0

Antecedentes

Eu modelei seu utilitário cli da seguinte forma:

$ cat cli
#!/bin/bash

while IFS= read -r line; do
  if [ "$line" == "password" ]; then
    break
  else
    echo 'Credentials incorrect'
  fi
done

Usando grep

Você pode usar grep -m1 ... para sair depois que a primeira correspondência for encontrada. O -m1 significa parar após o 1º jogo.

senha incorreta
$ ./cli | grep -m 1 "Credential"
blah
Credentials incorrect

$
boa senha
$ ./cli | grep -m 1 "Credential"
password
$

Usando sed

Uma abordagem semelhante usa sed :

senha incorreta
$ ./cli | sed '/Credential/ q'
blah
Credentials incorrect

$
boa senha
$ ./cli | sed '/Credential/ q'
password
$
    
por 25.07.2018 / 05:46