Bash命令的输出存储在任何寄存器中吗?例如,类似于$?捕获输出而不是退出状态。
我可以将输出赋值给一个变量:
output=$(command)
但那更多的是打字……
Bash命令的输出存储在任何寄存器中吗?例如,类似于$?捕获输出而不是退出状态。
我可以将输出赋值给一个变量:
output=$(command)
但那更多的是打字……
当前回答
我认为使用脚本命令可能会有帮助。类似的,
脚本-c bash -qf fifo_pid . sh 在解析后使用bash特性进行设置。
其他回答
答案是否定的。Bash不向内存中的任何参数或块分配任何输出。此外,您只能通过允许的接口操作来访问Bash。Bash的私人数据是无法访问的,除非你黑进去。
你可以使用$(!!) 重新计算(而不是重新使用)上一个命令的输出。
的! !自行执行最后一个命令。
$ echo pierre
pierre
$ echo my name is $(!!)
echo my name is $(echo pierre)
my name is pierre
就像konsolebox说的,你必须黑进bash本身。这里有一个很好的例子来说明如何实现这一点。stderred存储库(实际上是为stdout上色)给出了如何构建它的说明。
我尝试了一下:在.bashrc中定义一些新的文件描述符,比如
exec 41>/tmp/my_console_log
(数字是任意的),并相应地修改stderred.c,以便内容也被写入fd 41。它可以工作,但是包含大量的NUL字节,奇怪的格式,基本上是二进制数据,不可读。也许对C语言很了解的人可以尝试一下。
如果是这样,那么获取最后打印行的所有内容都是tail -n 1 [logfile]。
如果你在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代表粘贴板,是剪贴板的同义词。
受到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中,并且该命令不会被调用两次。