最后一个shell命令的输出

时间:2010-07-20 02:37:32

标签: csh

直到3小时构建脚本中途,我才会记得我想在输出结束后看到输出开头的内容。此时我已超过终端中的行数,因此我无法向上滚动查看它(或者开头很难找到)。当然,我可以更好地存储我的输出,但如果可能的话,我一直很好奇。

在linux shell中,是否可以返回最后一个命令的输出。我意识到我可以通过管道输出或将输出发送到文件,但我的要求是在命令运行后检索输出

使用csh,但会听到任何shell。

11 个答案:

答案 0 :(得分:33)

没有。程序的输出永远不会通过shell的手。没有重定向,它直接进入TTY。通过重定向,它可以直接转到它所指向的任何文件或管道。 shell不知道进程发送到stdout / stderr的内容。

答案 1 :(得分:19)

script(1)正是您所需要的:

script
make
exit
vim typescript

script程序将启动一个新shell并将输入和输出保存到typescript文件。完成后,只需使用exit^D关闭shell即可。如果您不想启动新shell而只是运行构建,则可以使用:script -c <command>

答案 2 :(得分:8)

如果再次运行命令不会改变任何东西,你可以使用!!访问历史堆栈的顶部以重新运行最后一个命令。在反引号中执行此操作将允许您使用结果。

$> find . -iname fileInUnknownLocationInHierarchy.txt
./something/buried/deep/where/you/dont/want/to/retype/fileInUnknownLocationInHierarchy.txt
$> vim `!!`

答案 3 :(得分:3)

对于使用游标寻址的某些命令,这可能会非常混乱。 vim会话的输出是什么?或者稍微更健全的示例:您正在使用wget下载文件,并显示百分比条从0%到100%。那是什么输出?

我认为您基本上想要在当前行和之前的提示之间进行任何硬拷贝。这不是shell重定向会是一个很好的例子,这基本上是终端会做的事情。您可以通过在屏幕上复制和粘贴来手动执行此操作,也许您可​​以使用其exec命令自动执行此操作。 tmux可能有类似的东西,你可以使用Emacs的shell模式做一些奇怪的事情,但这是一个相当重要的解决方案。 rxvt-unicode有perl extension ...

答案 4 :(得分:2)

如何使用替代品。像这样:

command1
command2
RESULT=`LASTCOMMAND`
echo $RESULT

答案 5 :(得分:1)

您可以使用$?查看最后一个命令的返回码,至少在bash中。

到目前为止,我认为你不能。

答案 6 :(得分:1)

如果您正在寻找上次执行的命令的返回代码,请使用echo $?

当您想要查找上一个命令是否成功执行并且您还可以将其转换为构建脚本以进行通过/失败警报时,这通常会有所帮助。

答案 7 :(得分:0)

将输出保存为变量?

bash: Output=$(ls); echo $Output

答案 8 :(得分:0)

我可以使用tee命令将输出也放到STDOUT中,然后再使用它。

答案 9 :(得分:0)

这是您终端的功能。您应该专注于创建一个您不必记住做任何事情的设置。一种可能的解决方案是在启用日志记录的情况下在您的登录脚本中启动“屏幕”(这不是那么容易实现)。

答案 10 :(得分:0)

您始终可以在emacs shell窗口中运行该过程。它会保留一切。