Добрый день!
Нарвался на статьи на Хабре, по Башу(по местным комментам я понял уже, что материал не ахти, но всё же). Есть там вот такой пример, «как вытащить первого пользователя из выдачи команды who» и записать в переменную:
logged_on=$(who | grep -i -m 1 $1 | awk ‘{print $1}’)
Как я не пытался выполнить этот код, всё тщетно. Во время выполнения ругается Grep:
Usage: grep [OPTION]… PATTERN [FILE]…
Понимаю, что проблема в том, что Grep’ом хотят вытащить первый элемент в первой строке, но Grep не умеет в ‘$0/$1/$2’ и т.д.
Статья на Хабре - есть перевод другой статьи, оригинала. Там эту задачу решают по-другому:
logged=$(who | awk -v IGNORECASE=1 -v usr=$1 ‘{ if ($1==usr) { print $1 }exit }’)
но в моём случае всё тоже тщетно, в переменную ничего не записывается. Почему? Определить не смог. Пробовал немного изменить код:
logged=$(who | awk ‘{BEGIN IGNORECASE=1; usr=$1} { if ($1==usr) { print $1 }exit }’)
но результат по прежнему нулевой.
Саму задачу я уже решил, совсем по другому, через костыль, но всё же хочу правильно всё понять и разобраться. Как решать задачу верно? Может у меня какой-то не сильно умный GREP, который не умеет в регулярные выражения, если я не спутал понятия конечно?
Update:
Прошу меня простить, на абзац ниже, написано, что скрипт будет вызываться с параметром(например, интересующий нас пользователь), который попадает в $1 и всё сразу работает. Не доглядел. Извините!