【问题标题】:Reference stdout (i.e. output of previous command) quickly in bash?在 bash 中快速引用标准输出(即前一个命令的输出)?
【发布时间】:2012-07-10 14:31:03
【问题描述】:

有没有办法快速(例如通过键盘快捷键等)引用它写入标准输出的上一个命令输出的输出?

例如,如果我这样做:

which rails

它返回 /usr/local/bin/rails 然后我想在 textmate 中打开该文件,我可以像这样重新输入输出:

mate /usr/local/bin/rails

但是有没有一种方法可以快速引用输出而无需重新输入?

注意:我知道我可以做 mate $(which rails),但我特别希望参考标准输出。

【问题讨论】:

标签: bash shell unix command-line readline


【解决方案1】:

我在历史参考中使用反引号:

$ which rails
/usr/local/bin/rails
$ mate `!!`

其实我的编辑器(一个启动 gvim 的脚本)别名为e,所以看起来更短:

$ e `!!`

而且您始终可以绑定到热键(请参阅 bash 手册页了解 bind 命令和 readline support)。

此外,如果您可以使用剪切缓冲区(在 X 应用程序中用鼠标选择),类似下面的热键可能会很有用:

$ e $(xclip -out)

该命令将使用命令行上剪切缓冲区中的任何内容启动编辑器。由于只需双击即可选择许多路径,因此可以非常快速地编辑选定的路径。

【讨论】:

  • `!!` 方式不引用标准输出;相反,它会重新运行该命令。你不能通过“echo $RANDOM”然后“echo `!!`”来测试这个:值会不同。
  • 这对于大多数实际用途来说已经足够了。并不是说所有命令都可以重复保持原始效果,但许多命令都可以。而且还有卡车可以粘贴选择...
【解决方案2】:

你总是可以在反引号中运行命令:

mate `which rails`

我不得不说,虽然感觉有点,呃,有风险。如果您的 PATH 已被篡改,从而返回与您真正需要的不同版本的 rails 怎么办?如果 which 什么都不返回怎么办?因此,请注意关闭所有这些错误情况,或以某种方式避免它们(例如,从配置文件中读取到 rails 的路径,并编写一个为您构建该配置文件的工具)。

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 2014-02-02
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多