質問

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"を使用できたため、同じ効果が得られます)。

あなたの疑問を明確にしたいと思っています。

他のヒント

whileuntil (そして、確かに、 if)テストの出口コードを見てください。STDOUT(またはSTDERR)で生成されるかもしれないテキストではありません。

/dev /nullへのリダイレクトが使用された理由は、コマンドが一致している場合にのみ出力を生成するため、ほとんどの場合(明らかに)ないためですが、ある場合、あなたはそれを見ることに興味がありません。結果。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top