Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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中最后一个命令输出的行?_Bash_Shell - Fatal编程技术网

有没有办法存储Bash中最后一个命令输出的行?

有没有办法存储Bash中最后一个命令输出的行?,bash,shell,Bash,Shell,我正在尝试使用Bash脚本过滤和记录上一个命令中的信息。我想知道是否有办法将上一个命令中的行存储为变量(如数组),以便对它们进行过滤和编辑 我的第一个想法是尝试varname=(`last`)尝试直接将信息记录到一个新变量中,但这只记录一行以内的字符,并将其记录为一个字符串。是否有某种方法可以将最后一行中的所有行记录为数组或其他变量 最后一行的格式为表格数据,仅供参考。示例行如下所示: abc0123 pts/01 127.0.0.1星期六10月3日20:54仍然登录 或 abc0123 pts

我正在尝试使用Bash脚本过滤和记录上一个命令中的信息。我想知道是否有办法将上一个命令中的行存储为变量(如数组),以便对它们进行过滤和编辑

我的第一个想法是尝试
varname=(`last`)
尝试直接将信息记录到一个新变量中,但这只记录一行以内的字符,并将其记录为一个字符串。是否有某种方法可以将最后一行中的所有行记录为数组或其他变量

最后一行的格式为表格数据,仅供参考。示例行如下所示:

abc0123 pts/01 127.0.0.1星期六10月3日20:54仍然登录


abc0123 pts/01 127.0.0.1星期六10月3日20:53-20:54(00:01)

如果您想为每一行设置单独的数组条目,请将IFS临时设置为分配的换行符

IFS='
' A=(`printf 'a b\nc d'`)
echo "Line 0: ${A[0]}"
echo "Line 1: ${A[1]}"
将输出

Line 0: a b
Line 1: c d
a b
c d
相反,如果希望将所有内容都作为单个变量,则不需要任何Bashism:

variable="`printf 'a b\nc d'`"
echo "$variable"
将输出

Line 0: a b
Line 1: c d
a b
c d
请注意,后者删除最后一行末尾可能的空格。如果你想避免这种情况,你需要一个技巧:

variable="`cmd; echo A`"
variable=${variable%A}

array=($(somecommand))
是一种反模式,因为原始代码中给出的原因确实存储了一个数组。您可能只是在打印它的第一个元素。例如,
echo$array
就是这样做的;它只打印第一个元素。如果要从数组中读取面向行的数据信息,请使用上面链接中给出的
mapfile
readarray
。请问您将如何处理这些数据?喜欢用不同的格式再次打印吗?计算次数,计算登录次数?调用任何基于它们的命令?您可以使用像
w
who
这样的命令与
watch
或without组合使用,并且拥有您想要的,而无需解析命令的文本输出,这被认为是不好的做法,请参阅上面关于bash陷阱的链接,并在您的示例中查看在行尾、文本或时间处具有不同字段的简单示例。