36

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

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

我想这样做:

>ls ~/<some very long path>/

我知道有两种方法可以做到这一点: 1.用鼠标
复制。 2. 使用/ / / / / /etc... 的某种组合从输出中仅提取我需要的内容,然后在反引号内使用它。~/<some very long path>/
headtailawksedperlcut

有没有不使用鼠标复制文本的方法?想到的例子是 VIM 中的可视模式,但我不知道如何在 xterm 中做到这一点。

4

6 回答 6

48

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

快速教程:

  1. 打开屏幕:(screenscreen myprog my args here
  2. 运行你的程序,产生你想要复制的输出
  3. 进入复制模式:Control+ a+[
  4. 将光标移动到起点
  5. Enter
  6. 将光标移动到终点
  7. Enter
  8. 粘贴:Control+ a+]

屏幕比这更强大(我用它来标记几个虚拟终端,而不需要特殊的终端模拟器,而且当 X 崩溃或其他东西时我不会失去我的会话)。要离开屏幕,只需结束您的 shell 会话,或键入Ctrl+ aCtrl+ \

于 2008-11-23T06:31:15.880 回答
12

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

grep error error.log | xsel -bi
于 2008-11-25T21:09:08.633 回答
9

您也可以使用whichtmux具有. screen一旦你进入tmux并且你有你想要复制的输出,你可以执行以下操作来复制然后粘贴它:

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

这些说明假定启用了 emacs键绑定。对于vi绑定,请参阅此比较或按照分步指南进行操作。

于 2015-02-25T10:05:34.263 回答
3

OP 说他不想这样做,但这里有一种 unix utils 方法可以为后代做这件事。如果您学习了这些小的 unix 实用程序,它们会非常强大。

ls $( 目录名 $( grep 错误 error.log | head -1 | cut -d " " -f 5- ) )

注意:记忆中的语法

于 2008-11-23T07:03:57.093 回答
1

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

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

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

试试看,希望这可以解决您的问题。

于 2008-11-27T20:19:47.593 回答
1

最简单的方法是使用byobuwhich uses one tmuxor screenin the background。它是一个包装工具,使使用screentmux方式更高效、快速和简单。因此,它也使得复制 n 粘贴变得非常简单。
一旦你进入byobu并且你有你想要复制的输出,你可以执行以下操作来复制然后粘贴它:

  1. 按 进入滚动模式F7。此模式允许在先前命令的输出或文本编辑器的正文中使用箭头键或PageUp和键上下滚动。PageDown
  2. 使用箭头键将光标移动到您要开始复制的位置。
  3. 按下并释放Space栏。
  4. 移动光标选择要复制的文本/区域(这看起来非常类似于 vim VISUAL 模式)
  5. 按复制Enter(这将立即退出滚动模式和复制模式)
  6. 您现在可以使用粘贴Alt + Insert(仅在byobu默认情况下,但您可以通过安装 xclip 并在 byobu 中进行一些设置来扩展启用粘贴的应用程序 -> 观看终端多路复用器简介 - 第 2 部分,大约从第 42 分钟到第 48 分钟)
于 2020-04-12T19:35:47.467 回答