Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用pinky只显示用户的名字而不是显示所有信息?_Bash - Fatal编程技术网

Bash 如何使用pinky只显示用户的名字而不是显示所有信息?

Bash 如何使用pinky只显示用户的名字而不是显示所有信息?,bash,Bash,任何想法都很好,谢谢!我试图在网上搜索,但找不到任何有用的建议,另外,我如何检查输入是否可以找到,我现在的输入是否有效 您可以为此使用awk。我不知道你的$1参数代表什么。如果让我猜的话,那就是登录名。下面是小指的一些示例输出: 登录名TTY Idle在何处 fbar Foo Bar pts/0 00:26 2020-02-05 09:32 10.0.0.2 bbaz Bar Baz pts/1 00:03 2020-01-27 10:41 10.0.0.3 假设$1代表一个登录名,则应使用以

任何想法都很好,谢谢!我试图在网上搜索,但找不到任何有用的建议,另外,我如何检查输入是否可以找到,我现在的输入是否有效

您可以为此使用
awk
。我不知道你的
$1
参数代表什么。如果让我猜的话,那就是登录名。下面是小指的一些示例输出:

登录名TTY Idle在何处
fbar Foo Bar pts/0 00:26 2020-02-05 09:32 10.0.0.2
bbaz Bar Baz pts/1 00:03 2020-01-27 10:41 10.0.0.3
假设$1代表一个登录名,则应使用以下选项:

#if argument passed in cannot be found among sessions logged in
function fname(){
result=$(pinky "$1")
if [ ! -f "$result" ] then
       FNAME="NOTFOUND"
return 0
else
       FNAME="$(pinky -f -h)"
return 0
fi
}
说明:

awk的
-F
选项定义字段分隔符并支持正则表达式。因此,我们将分隔符定义为“至少1个空格”,因为pinky的输出类似于列类型格式,其中每个字段之间可能有多个空格。将其用作字段分隔符,用户fbar的字段值如下所示:

$1:fbar
$2:Foo
$3:酒吧
$4:pts/0
... 其他的我们都不在乎。我们得到了名字字段($2)
实际的awk代码部分是
“\$1==\”$login\u name\“{print\$2}”
。通常,最好对awk代码使用单引号,以避免所有转义,但我想包含一个bash变量,所以我使用了双引号

“\$1==\“$login\u name\”
\$1
正在引用输入中的第一个字段。我们在字符串比较中将其与bash变量
$login\u name
进行比较。我们可以将bash变量保留为
$1
,但这会使比较更加混乱(将
\$1
$1
进行比较)。如果比较结果为真,我们将运行下一位代码:
{print\$2}
这将打印我们的名字字段

注意:如果用户使用多个会话登录,您将获得多行输出。如果不需要这样做,您也可以在第一次匹配时退出awk程序:

login_name=$1
pinky | awk -F '[ ]+' "\$1 == \"$login_name\" {print \$2}"
另一种可能更简洁的方法是使用awk的
-v
(变量赋值)选项来避免bash变量和转义字符:

pinky | awk -F '[ ]+' "\$1 == \"$login_name\" {print \$2; exit}"
编辑:
awk
的默认字段分隔符实际上是
[:空格:]+
这与我定义的很接近,但包含了其他类似空格的选项卡。这使得上面的-F选项多余,可以忽略。

参数代表什么?用户名?谢谢!我输入的是用户名,我使用pinky-F(usrname)| awk'{print$2}实现了相同的效果“!!谢谢你的提示!@Yangziki哦,是的,这更干净了。你也教了我一些新东西。awk的默认分隔符与我定义的非常接近,使得字段分隔符定义多余。
pinky | awk -v login="$1" -F '[ ]+' '$1 == login {print $2; exit}'