有没有办法组合两个bash命令的输出?

时间:2019-02-15 18:40:08

标签: bash

我正在向用户显示显示名称,登录日期和时间及其默认的Bash shell。我可以让每个人打印,但是我找不到找到将其逐行显示的方法。

这是我迄今为止尝试过的。我已经尝试过使用该管道,但到目前为止,将它们都放入变量中是最近的事情。

#!/bin/bash

x="$(who | tr -s [:space:] | cut -d' ' -f1,3,4)"
y="$(cat /etc/passwd | tr -s [:print:] | cut -d':' -f7)"


echo $x  $y

对于每个用户,我必须显示以下内容:

username date of login time of login default bash shell

更新: 其他问题的答案将单个字符串组合在一起,这个问题是在询问如何将WHO命令的多行与用户默认的bash shell(同样是多行)组合在一起。这就是为什么我在这里问。

我的示例输出是显示用户名,登录时间和日期以及每个登录用户的默认bash shell,例如who命令(所以我基​​本上想使用who命令,从中切出我想要的内容,然后将用户的默认bash shell添加到末尾)。我有两个命令可以实现这一点,但是我需要将默认的bash shell添加到“ who”命令显示的每个用户上。现在,该程序将打印出所有已登录的用户,然后将其全部打印出来后,将打印默认的shell。

1 个答案:

答案 0 :(得分:1)

这是一次快速而肮脏的尝试。

who |
while read -r name _ time date _; do
    printf "%-12s %-14s %-14s %s\n" \
        "$name" "$time" "$date" \
        "$(getent passwd "$name" | cut -d: -f7)"
done

我正在猜测字段是什么以及您想要的列的宽度; who工具的输出非常依赖于系统。