为什么管道在Linux中的bash中不生效?

时间:2020-02-06 01:21:40

标签: linux bash shell

这里是计算同一登录用户的会话数。

如果我知道特定的用户名(例如usera),则可以运行直接命令,如下所示:

who | grep usera | wc -l

如果我不知道当前用户,则需要用户参数。 但是以下代码不起作用:

currentuser=`whoami`

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

怎么了?

谢谢!

3 个答案:

答案 0 :(得分:2)

Grep具有-c标志,因此不需要wc -l加上其他管道。

who | grep -c -- "$USER"

"$LOGNAME"也是代替"$USER"的选项,哪个是bash特定的?我不知道,我所知道的是它们都在LinuxFreeBSD系统上。 --只是一种习惯,in case用户以破折号开头,grep不会将其解释为选项。

答案 1 :(得分:1)

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

您正在将who | ...命令的结果分配给一个变量,要查看其值,可以使用echo $sessionnumber

答案 2 :(得分:0)

您似乎对参数和变量感到困惑。

您想要得到的可能是

who | grep $(whoami) | wc -l

$()等效于您使用的反引号。

写作时

sessionnumber=``

这将运行反引号内的任何内容,并将输出保存到变量中。然后,您可以使用美元符号访问变量:

echo "$sessionnumber"