我从我的教授那里收到了这个 linux 脚本,我试图了解它的作用,我想我知道它的大部分作用。然而,有一个部分让我感到困惑。junk
在这一行中做什么:
who | while read user junk
Run Code Online (Sandbox Code Playgroud)
它的目的是什么?我试过在谷歌上搜索它,但除了引用垃圾字符之外,我似乎无法在任何地方找到它,而且据我所知,这是另一回事。整个脚本是:
who | while read user junk
Run Code Online (Sandbox Code Playgroud)
read
脚本中使用的方式意味着它将把输出中每一行的第一个单词读who
入变量user
,并将行的其余部分(从第一个空格或制表符)读入变量junk
。
默认情况下,read
读取由$IFS
(空格、制表符、换行符)中的任何字符分隔的单词到每个列出的变量中。列出的最后一个变量将在将单词分配给前一个变量后获得数据的剩余部分。
这是一种仅读取每行第一个单词的廉价方式。
有关更多详细信息,请参阅“了解“IFS= read -r line” ”。
该脚本有几个问题。例如,如果用户的用户名是彼此的子字符串,例如bill
和,它会给您不正确的结果(并且很可能是错误)billy
。如果用户的文件名包含换行符,它也会产生错误的结果。
它还会为每个用户who
再次执行,即使此信息很可能已使用初始read
. 它还读取/etc/passwd
该初始who
命令的每行输出数次。
我建议将处理分为信息收集部分(使用单个getent passwd "$user"
调用获取passwd
信息,而不使用top
主要是交互式监控工具)和单独的报告部分(用于输出)。使用空格(如空行)也可以提高可读性。