Bash命令的输出存储在任何寄存器中吗?例如,类似于$?捕获输出而不是退出状态。

我可以将输出赋值给一个变量:

output=$(command)

但那更多的是打字……


当前回答

就像konsolebox说的,你必须黑进bash本身。这里有一个很好的例子来说明如何实现这一点。stderred存储库(实际上是为stdout上色)给出了如何构建它的说明。

我尝试了一下:在.bashrc中定义一些新的文件描述符,比如

exec 41>/tmp/my_console_log

(数字是任意的),并相应地修改stderred.c,以便内容也被写入fd 41。它可以工作,但是包含大量的NUL字节,奇怪的格式,基本上是二进制数据,不可读。也许对C语言很了解的人可以尝试一下。

如果是这样,那么获取最后打印行的所有内容都是tail -n 1 [logfile]。

其他回答

可以使用-exec命令在命令的输出信息上执行命令。所以这将是一个输出的重用作为一个例子给出了下面的find命令:

find . -name anything.out -exec rm {} \;

你在这里说->找到一个名为anything的文件。在当前文件夹中,如果找到,删除它。如果没有找到,则将跳过-exec之后的剩余部分。

答案是否定的。Bash不向内存中的任何参数或块分配任何输出。此外,您只能通过允许的接口操作来访问Bash。Bash的私人数据是无法访问的,除非你黑进去。

你可以使用$(!!) 重新计算(而不是重新使用)上一个命令的输出。

的! !自行执行最后一个命令。

$ echo pierre
pierre
$ echo my name is $(!!)
echo my name is $(echo pierre)
my name is pierre

一种方法是使用DEBUG陷阱:

f() { bash -c "$BASH_COMMAND" >& /tmp/out.log; }
trap 'f' DEBUG

现在,最近执行的命令的stdout和stderr将在/tmp/out.log中可用

唯一的缺点是它将执行两次命令:一次将输出和错误重定向到/tmp/out.log,一次正常执行。也许也有一些方法可以防止这种行为。

不确定你到底需要这个做什么,所以这个答案可能不相关。你总是可以保存命令的输出:netstat >> output.txt,但我不认为这是你想要的。

当然也有编程选项;你可以简单地让一个程序在命令运行后读取上面的文本文件,并将其与一个变量关联起来,在Ruby中,我选择的语言,你可以使用'反撇号'从命令输出中创建一个变量:

output = `ls`                       #(this is a comment) create variable out of command

if output.include? "Downloads"      #if statement to see if command includes 'Downloads' folder
print "there appears to be a folder named downloads in this directory."
else
print "there is no directory called downloads in this file."
end

将其插入到.rb文件中并运行:ruby file。Rb,它会在命令中创建一个变量并允许你对它进行操作。