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

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

output=$(command)

但那更多的是打字……


当前回答

受到anubhava回答的启发,我认为这实际上是不可接受的,因为它将每个命令运行两次。

save_output() { 
   exec 1>&3 
   { [ -f /tmp/current ] && mv /tmp/current /tmp/last; }
   exec > >(tee /tmp/current)
}

exec 3>&1
trap save_output DEBUG

这样,最后一个命令的输出就在/tmp/last中,并且该命令不会被调用两次。

其他回答

受到anubhava回答的启发,我认为这实际上是不可接受的,因为它将每个命令运行两次。

save_output() { 
   exec 1>&3 
   { [ -f /tmp/current ] && mv /tmp/current /tmp/last; }
   exec > >(tee /tmp/current)
}

exec 3>&1
trap save_output DEBUG

这样,最后一个命令的输出就在/tmp/last中,并且该命令不会被调用两次。

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

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

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

如果你在mac上,并且不介意将输出存储在剪贴板中,而不是写入到变量中,你可以使用pbcopy和pbpaste作为解决方案。

例如,与其这样做来查找一个文件并将其内容与另一个文件进行区分:

$ find app -name 'one.php' 
/var/bar/app/one.php

$ diff /var/bar/app/one.php /var/bar/two.php

你可以这样做:

$ find app -name 'one.php' | pbcopy
$ diff $(pbpaste) /var/bar/two.php

当你运行第一个命令时,字符串/var/bar/app/one.php就在剪贴板中。

顺便说一下,pbcopy和pbpaste中的pb代表粘贴板,是剪贴板的同义词。

我认为使用脚本命令可能会有帮助。类似的,

脚本-c bash -qf fifo_pid . sh 在解析后使用bash特性进行设置。

不确定你到底需要这个做什么,所以这个答案可能不相关。你总是可以保存命令的输出: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,它会在命令中创建一个变量并允许你对它进行操作。