「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
$

おすすめ記事