Intereting Posts
Как создать виртуальный дополнительный экран в X11? В Emacs редактирование C, sort-fields не работает или указание единственного завершения. Зачем? Vagrant ssh закрывает соединение после выполнения опции -t Отбросить все ICMP-пакеты? Использование diff, но игнорирование чисел Каков правильный способ прослушивания на последовательном порту с помощью minicom? Каковы очевидные уязвимости безопасности при запуске guix-демона от имени root? Установка времени вручную в Lubuntu не обновляет аппаратные часы Недопустимые подписи при запуске обновления apt-get В терминале osx, как открыть EMACS в новом окне? Лучшая файловая система для съемных носителей Как узнать, какие символические ссылки существуют для данного каталога? Я пытаюсь подсчитать и распечатать имена файлов песен, используя awk, следующим образом Заменить текст с помощью sed и сохранить часть исходного текста Каковы предварительные условия заказа только для заказа в файле GNU Make?

Убить команду, основываясь на выводе `grep`?

У нас есть интерфейс командной строки для входа в систему, например:

$ cli -u username -p password 

В случае, если указан неправильный пароль, мы получаем сообщение «Учетные данные неверны», а затем оно ожидает ввода правильного пароля и не закрывается. Если указан правильный пароль, он не предоставляет никаких сообщений и входит в систему напрямую.

Я ищу, чтобы прекратить выполнение команды в случае неправильного пароля, а не ждать ввода пользователя.

Идея состоит в том, чтобы найти ключевое слово Credentials и, если оно найдено, убить команду:

 $ cli -u username -p password | grep Credentials 

Как бы я это сделал?

Вместо того, чтобы убивать процесс, вы можете проверить что-то вроде try-before-disconnect в файле конфигурации. Что я обычно делаю, чтобы ограничить попытки входа в систему через ssh.

Фон

Я смоделировал вашу утилиту 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 означает остановку после 1-го матча.

неверный пароль

 $ ./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 $