我正在使用名为Beginning Linux Programming(第4版)的书从基础知识中学习shell编程。我对此脚本感到困惑,其中包含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
在这里使用了什么?为什么要将grep输出重定向到/dev/null
?
答案 0 :(得分:5)
如前所述,'until'循环用于测试条件,并将运行所有'do | done'块,直到条件存在为止。换句话说,它仅在条件存在为FALSE时执行代码块,并运行它直到它变为真。您正在测试的脚本对于捕获作为参数传递给脚本的登录用户非常有用(因此,grep“$ 1”,位置参数为$ 1)。它将睡眠一分钟(睡眠60),直到该用户登录到系统,然后它将退出循环并执行所有'$ 1刚刚登录'的东西。将grep输出重定向到/ dev / null用于不显示grep命令的输出(您可以使用grep -q“$ 1”,这将达到相同的效果)。
希望澄清你的疑虑。
答案 1 :(得分:0)
while
和until
(不可否认,if
)查看测试的退出代码,而不是stdout(或stderr)上可能生成或未生成的任何文本)。
我怀疑使用重定向到/ dev / null的原因是因为命令只在匹配时生成输出,大多数时候(肯定)没有,但是当有,你不感兴趣看到结果。