![「grep」出力に基づいてコマンドを終了しますか? [閉鎖]](https://linux33.com/image/137517/%E3%80%8Cgrep%E3%80%8D%E5%87%BA%E5%8A%9B%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%84%E3%81%A6%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E7%B5%82%E4%BA%86%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
次のようにシステムにログインするコマンドラインインターフェイスがあります。
$ 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ログインの試みを制限するためにこれを行います。