Bash命令的输出存储在任何寄存器中吗?例如,类似于$?捕获输出而不是退出状态。
我可以将输出赋值给一个变量:
output=$(command)
但那更多的是打字……
Bash命令的输出存储在任何寄存器中吗?例如,类似于$?捕获输出而不是退出状态。
我可以将输出赋值给一个变量:
output=$(command)
但那更多的是打字……
当前回答
一种方法是使用DEBUG陷阱:
f() { bash -c "$BASH_COMMAND" >& /tmp/out.log; }
trap 'f' DEBUG
现在,最近执行的命令的stdout和stderr将在/tmp/out.log中可用
唯一的缺点是它将执行两次命令:一次将输出和错误重定向到/tmp/out.log,一次正常执行。也许也有一些方法可以防止这种行为。
其他回答
我认为使用脚本命令可能会有帮助。类似的,
脚本-c bash -qf fifo_pid . sh 在解析后使用bash特性进行设置。
答案是否定的。Bash不向内存中的任何参数或块分配任何输出。此外,您只能通过允许的接口操作来访问Bash。Bash的私人数据是无法访问的,除非你黑进去。
如果你不想重新计算前一个命令,你可以创建一个宏,它扫描当前终端缓冲区,尝试猜测最后一个命令的-假设-输出,将其复制到剪贴板,最后将其输入到终端。
它可以用于返回单行输出的简单命令(在Ubuntu 18.04上使用gnome-terminal进行测试)。
安装以下工具:xdootool、xclip、ruby
在gnome-terminal选择首选项->快捷方式->全选并设置为Ctrl+shift+a。
创建以下ruby脚本:
cat >${HOME}/parse.rb <<EOF
#!/usr/bin/ruby
stdin = STDIN.read
d = stdin.split(/\n/)
e = d.reverse
f = e.drop_while { |item| item == "" }
g = f.drop_while { |item| item.start_with? "${USER}@" }
h = g[0]
print h
EOF
在键盘设置中添加以下快捷键:
Bash -c '/bin/sleep 0.3;Xdotool键ctrl+shift+a;Xdotool键ctrl+shift+c;(xclip out | ${HOME}/parse. out)Rb) > /tmp/clipboard);(cat /tmp/clipboard | xclip -sel clip);Xdotool键ctrl+shift+v '
以上快捷方式:
将当前终端缓冲区复制到剪贴板 提取最后一个命令的输出(只有一行) 将其输入到当前终端
你可以使用$(!!) 重新计算(而不是重新使用)上一个命令的输出。
的! !自行执行最后一个命令。
$ 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,一次正常执行。也许也有一些方法可以防止这种行为。