Почему конвейер не вступает в силу в bash в Linux? - PullRequest
0 голосов
/ 06 февраля 2020

Здесь нужно подсчитать количество сеансов одного и того же пользователя для входа в систему.

Я мог бы запустить прямую команду, если знаю указанное имя пользователя c, например, usera, следующим образом:

who | grep usera | wc -l

И если я не знаю текущего пользователя, мне нужен пользовательский параметр. Но следующие коды не работают:

currentuser=`whoami`

sessionnumber=`who | grep "$currentuser" | wc -l`

В чем ошибка?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 06 февраля 2020

Grep имеет флаг -c, поэтому wc -l плюс дополнительная труба не нужны.

who | grep -c -- "$USER"

"$LOGNAME" также является опцией вместо "$USER", то есть bash Speci c? Я не знаю, все, что я знаю, это то, что они оба на Linux и FreeBSD системе. -- это просто привычка, просто in case пользователь начинает с da sh grep не будет интерпретировать его как опцию.

1 голос
/ 06 февраля 2020
sessionnumber=`who | grep "$currentuser" | wc -l`

Вы присваиваете результат команды who | ... переменной и для просмотра ее значения вы можете использовать echo $sessionnumber

0 голосов
/ 06 февраля 2020

Похоже, вы запутались в параметрах и переменных.

Вероятно, то, что вы пытаетесь получить,

who | grep $(whoami) | wc -l

$() эквивалентно используемым обратным ссылкам.

Когда вы пишете

sessionnumber=``

, это запустит все, что находится в пределах обратных галочек, и сохранит вывод в переменную. Затем вы можете получить доступ к переменной, используя обозначение доллара:

echo "$sessionnumber"
...