Что делает команда "who | grep $ 1" в сценарии оболочки? - PullRequest
0 голосов
/ 07 января 2011

Я изучаю программирование оболочки с самых основ, используя книгу «Начало программирования на Linux» (4-е издание). Я запутался в этом сценарии с 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?

Ответы [ 2 ]

5 голосов
/ 07 января 2011

Цикл 'then' используется для проверки условия, как вы упомянули, и будет запускать весь блок 'do | done', пока текущее условие не станет истинным. Другими словами, он выполняет блок кода только тогда, когда присутствует условие FALSE, и запускает его, пока он не станет истинным. Скрипт, который вы тестируете, полезен для перехвата зарегистрированного пользователя, который вы передаете скрипту в качестве параметра (следовательно, grep "$ 1", то есть $ 1, позиционный параметр). Он будет спать в течение минуты (сон 60), пока этот пользователь не войдет в систему, а затем выйдет из цикла и выполнит все действия «$ 1 только что вошел». Перенаправление вывода grep в / dev / null используется, чтобы не отображать вывод команды grep (вы могли бы использовать grep -q "$ 1", и это дало бы тот же эффект).

Надеюсь прояснить ваши сомнения.

0 голосов
/ 07 января 2011

while и until (и, по общему признанию, if) рассматривают код завершения теста, а не какой-либо текст, который может или не может быть сгенерирован на stdout (или stderr).

Я подозреваю, что причина перенаправления на / dev / null была в том, что команда генерирует вывод только при наличии совпадения, большую часть времени (по общему признанию) нет, но когда оно есть, вас это не интересует видеть результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...