Как скопировать текст из моего 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.
Ответы
Ответ 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)
Попробуйте и надейтесь, что это может решить вашу проблему.