Подтвердить что ты не робот

Как скопировать текст из моего xterm без мыши?

Я хочу использовать часть вывода командной строки из командной строки в другом 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.

4b9b3361

Ответ 1

Вы можете использовать команды копирования и вставки экрана GNU.

Быстрый учебник:

  • Открыть экран: screen (или screen myprog my args here)
  • Запустите свою программу, создав вывод, который вы хотите скопировать.
  • Введите режим копирования: ^ A [
  • Переместите курсор в начальную точку
  • Нажмите Enter
  • Переместите курсор в конечную точку
  • Нажмите Enter
  • Вставить: ^ A]

Экран гораздо более мощный, чем это (я использую его для вкладок нескольких виртуальных терминалов без необходимости использования специального эмулятора терминала, а также для того, чтобы я не потерял свои сеансы при сбоях X или что-то в этом роде). Чтобы выйти из экрана, просто закончите сеанс оболочки или введите ^ A ^. ​​

Ответ 2

Я нахожу XSel полезен в подобных ситуациях. Это инструмент, который манипулирует выбором X. Например, это сохранит вывод вашей команды в буфер обмена:

grep error error.log | xsel -bi

Ответ 3

Вы также можете использовать tmux с аналогичными возможностями до screen. Когда вы находитесь в tmux, и у вас есть вывод, который вы хотите скопировать, вы можете сделать следующее, чтобы скопировать и затем вставить его:

  • Введите режим копирования с помощью Ctrl + B, [
  • Переместите курсор с помощью клавиш со стрелками, а затем запустите выделение с помощью Ctrl + Space
  • Переместите курсор, чтобы выбрать текст/область для копирования, а затем скопировать с помощью Alt + W (это немедленно выйдет из режима копирования)
  • Теперь вы можете вставить (только tmux) с помощью Ctrl + B, ]

Эти инструкции предполагают, что привязки клавиш emacs включены. Для привязок vi см. Это сравнение или просто следуйте this шаг за шагом руководство.

Ответ 4

OP сказал, что он не хотел этого делать, но здесь используется unix utils, чтобы сделать это для потомков. Если вы изучите эти небольшие утилиты unix, они могут быть достаточно мощными.

ls $(dirname $(ошибка grep error.log | head -1 | cut -d "" -f 5-))

Примечание: синтаксис из памяти

Ответ 5

Вы можете отправить вывод непосредственно на соответствующий xterm с помощью устройства xterm no. Вот команда.

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

(или независимо от названия устройства, вы можете получить его с помощью команды w для открытого xterm)

Попробуйте и надейтесь, что это может решить вашу проблему.