我想在另一个xterm中使用从命令行运行的命令的部分输出,或者作为不同命令的一部分。例如:

> grep error error.log
error: can't find file ~/<some very long path>/thisfile

我想这样做:

>ls ~/<some very long path>/

我知道有两种方法可以做到这一点:
1.用鼠标复制~/<some very long path>/
2.使用head / tail / awk / sed / perl / cut / etc ...的某种组合来从输出中仅提取我需要的内容然后使用 里面的反叛。

有没有办法在不使用鼠标的情况下复制文字?想到的例子是VIM内部的可视化模式,但我不知道如何在xterm中做到这一点。

有帮助吗?

解决方案

您可以使用GNU屏幕的复制和粘贴命令。

快速教程:

  1. 打开屏幕:screen(或screen myprog my args here
  2. 运行程序,生成要复制的输出
  3. 进入复制模式:控制 + a + [
  4. 将光标移动到起点
  5. 点击输入
  6. 将光标移动到终点
  7. 点击输入
  8. 粘贴:控制 + a + ]
  9. 屏幕比这更强大(我使用它来标记几个虚拟终端而不需要特殊的终端模拟器,并且当X崩溃或其他什么时我也不会丢失我的会话)。要退出屏幕,只需结束shell会话,或键入 Ctrl + a Ctrl + \

其他提示

我发现 XSel 在类似情况下非常有用。它是一个操纵X选择的工具。例如,这会将命令的输出存储到剪贴板:

grep error error.log | xsel -bi

您也可以使用类似功能tmuxscreen。一旦进入<=>并且您有要复制的输出,就可以执行以下操作来复制并粘贴它:

  1. 使用 Ctrl + B 进入复制模式, [
  2. 使用箭头键移动光标,然后使用 Ctrl + Space
  3. 开始选择
  4. 移动光标选择要复制的文本/区域,然后使用 Alt + W 进行复制(这将立即退出复制模式)
  5. 您现在可以使用 Ctrl + B ]
  6. 进行粘贴(仅限<=>内)

    这些指导假设启用了 emacs 键绑定。对于 vi 绑定,请参阅此比较或只需按照这个分步指南。

OP说他不想这样做,但这是一种unix utils方式来为后代做这件事。如果你学习这些小的unix实用程序,它们就会非常强大。

  

ls $(dirname $(grep error error.log | head -1 | cut -d <!> quot; <!> quot; -f 5-))

注意:内存中的语法

您可以使用xterm设备号将输出直接发送到相关的xterm。这是命令。

xyz$ls /home/ankit/documents/etc/x/y/z > /dev/pts/0 

(或watever是设备名称,您可以使用命令'w'获取它以打开xterm)

试试<!> amp;希望这可以解决你的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top