bash - 如何自动将上次执行的命令的输出捕获到变量中?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我希望能够在后续命令中使用上次执行的命令的结果。例如,

$ find . -name foo.txt
./home/user/some/directory/foo.txt

现在让我们说我想要能够在编辑器中打开文件,或者删除它,或者使用它做其他事情,例如

mv <some-variable-that-contains-the-result> /some/new/location

我该怎么做?也许使用一些bash变量?

提问于
用户回答回答于

这是一个非常糟糕的解决方案,但似乎大部分时间都适用。在测试过程中,我注意到有时^C在命令行上运行时效果不佳,尽管我稍微调整了一下以表现得更好一些。

这种黑客攻击只是一种交互模式,我相信我不会向任何人推荐它。后台命令可能会导致比正常情况下更少定义的行为。其他答案是以编程方式获得结果的更好方法。

这就是说,这里是“解决方案”:

PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'

设置此bash环境变量并根据需要发出命令。 $LAST通常会有你想要的输出:

startide seth> fortune
Courtship to marriage, as a very witty prologue to a very dull play.
                -- William Congreve
startide seth> echo "$LAST"
Courtship to marriage, as a very witty prologue to a very dull play.
                -- William Congreve
用户回答回答于

我不知道任何自动执行此操作的变量。除了复制粘贴结果之外,你可以重新运行你刚刚做的任何事情,例如

vim $(!!)

如果希望有一个空格或其他字符的文件名,可能会阻止正确的参数分析,请引用result(vim "$(!!)")。如果不加引号,只要不包含空格或其他shell解析令牌,就可以一次打开多个文件。

扫码关注云+社区