「誰ですか| Grep $ 1”コマンドはシェルスクリプトで行いますか?
-
30-09-2019 - |
質問
Beginning Linuxプログラミング(4th Ed)と呼ばれる本を使用して、まさに基本からプログラミングを学んでいます。私はこのスクリプトに混乱しています until
-句:
#!/bin/bash
until who | grep "$1" > /dev/null
do
sleep 60
done
# Now ring the bell and announce the unexpected user.
echo -e '\a'
echo "***** $1 has just logged in *****"
exit 0
私の疑いは何ですか who | grep "$1" > /dev/null
ここで使用されますか?グレップ出力をリダイレクトする理由 /dev/null
?
解決
あなたが前述したように、 'till'ループは条件をテストするために使用され、存在する条件が真になるまですべての「do | done」ブロックを実行します。言い換えれば、存在する条件がfalseである場合にのみコードブロックを実行し、それが真になるまで実行します。テストしているスクリプトは、スクリプトにパラメーターとして渡すログインユーザーのユーザーをキャッチするのに役立ちます(したがって、grep "$ 1"、ポジションパラメーター1ドルです)。そのユーザーがシステムにログインするまで、1分間眠ります(睡眠60)。その後、ループを終了して、「$ 1がログインした」すべてのものを実行します。 /dev /nullへのgrep出力のリダイレクトは、grep comandの出力を表示しないために使用されます(grep -q "$ 1"を使用できたため、同じ効果が得られます)。
あなたの疑問を明確にしたいと思っています。
他のヒント
while
と until
(そして、確かに、 if
)テストの出口コードを見てください。STDOUT(またはSTDERR)で生成されるかもしれないテキストではありません。
/dev /nullへのリダイレクトが使用された理由は、コマンドが一致している場合にのみ出力を生成するため、ほとんどの場合(明らかに)ないためですが、ある場合、あなたはそれを見ることに興味がありません。結果。