Запишите весь tmux scrollback в файл

Это не действительно unixy вопрос, но в любом случае, я рекомендовал бы использовать что-то другое от less для просмотра файлов CSV. Это не действительно правильный инструмент. Попробуйте что-то как R, который имеет хорошую поддержку взгляда на и при необходимости, работающий с файлами CSV. Например, считать 5 строк файла CSV, сделать

$ R
> read.csv("pheno.csv",nrows=5)
  faid   expid pid mid sex pheno
1 1420 NA12003   0   0   1     0
2 1420 NA12004   0   0   2     0
3 1420 NA10838   9  10   1     0
4 1420 NA12005   0   0   1     0
5 1420 NA12006   0   0   2     0

Посмотрите

> help(read.csv)

для справки.См. также

> help(write.csv)

для записи в файл и т.д.

Править: У меня, оказалось, был файл CSV, который является 1.1G и является 934 991 строкой долго.

$ time Rscript -e 'read.csv("GenomeWideSNP_6.na29.annot.csv", skip=500000, nrows=5, header=FALSE)'

Это пропускает 500 000 строк и читает 5 строк. R занимает 1 минуту для возврата этого и достигает высшего уровня в 620M использование (!), похоже, что это может читать пропущенные строки в память, хотя это не имеет никакого смысла.

Результат: я не действительно поклонник R, но для обработки малых и средних наборов данных, особенно если Вы хотите сделать статистические анализы ее, Вы могли бы сделать хуже, чем R. Альтернативой является Python и некоторый csv обработка библиотеки.

210
09.09.2014, 19:20
10 ответов

Это зависит от значения history-limit то, что Вы начались Ваш .tmux.conf - значение по умолчанию является 2000; если Вы хотите получить больше, то необходимо будет явно определить номер строк.

Для получения всего scrollback перейдите к режиму копии, выберите весь scrollback, и дергайте его в буфер, затем вставьте его в файл.

Как Вы выполняете, это будет зависеть от mode-keys опция Вы предпочитаете, vi или emacs. man tmux имеет полезную таблицу, описывающую соответствующие ключи.

У меня есть следующее в моем .tmux.conf упростить это:

unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

Процесс для получения полного scrollback затем:

PrefixEsc: переходить к режиму копии

v: начать визуальный выбор (принимающий Вас уже внизу экрана),

строительное стекло: получать все в scrollback

y: дергать его в буфер

Prefixc: откройте другое tmux окно

vim scrollback.txt

i: введите режим вставки в энергию

Prefixp: вставка в файл

Существует также ответ, здесь описывающий, как скопировать буфер во временное использование файла xsel это могло бы быть полезно.

58
27.01.2020, 19:27
  • 1
    Это проблематично в лучшем случае … вставляющий в режим вставки в Vim, имеет все виды проблем, например, когда Вам включили автоматическое добавление отступа. Я никогда не заставлял это работать к моей удовлетворенности. –  Konrad Rudolph 21.01.2015, 18:19
  • 2
    , Если Вы используете :set paste в энергии энергия проигнорирует добавляющие автоматические добавления отступа, или любой вставляет - базирующиеся привязки клавиш. –  tlunter 04.02.2015, 23:18
  • 3
    @tlunter хорошая подсказка! –  jasonwryan 05.02.2015, 01:10
  • 4
    Это может быть сделано с привязками клавиш по умолчанию? –  daveloyall 05.11.2015, 19:00
  • 5
    @daveloyall, Конечно, просто не используйте keybind опции, которые я включал от моего .tmux.conf... –  jasonwryan 05.11.2015, 19:14

С tmux 1.5, capture-pane команда принимает -S и -E указывать запуск и строки конца получения; отрицательные величины могут использоваться для определения строк из истории. После того как у Вас есть данные в буфере, можно сохранить их с save-buffer.

Вот привязка в качестве примера (подходящий для .tmux.conf) это оборачивает все это подсказкой для имени файла:

bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

Это получает до () 32 768 строк истории плюс в настоящее время отображаемые строки. Начиная с tmux 1.6, можно использовать числа вниз для INT_MIN, если область имеет историю, которая глубже, чем 32Ki строки (обычно строки на 2 Гб). Начиная в tmux 2.0, можно использовать capture-pane -S - для значения “запускаются в начале истории” (т.е. никакое большое, трудно кодированное отрицательное число).


Примечание: Количество строк в сохраненном файле не всегда будет равно пределу истории области плюс своя высота.

Когда буфер истории области полон, tmux отбрасывает самые старые 10% строк вместо того, чтобы отбросить всего одну строку. Это означает, что эффективная глубина истории области иногда будет всего 90% своего настроенного предела.

162
27.01.2020, 19:27
  • 1
    Спасибо за ответ …, Но моя версия tmux не принимает -S кому: capture-pane (это, кажется, 1.3-2, хотя это от dpkg, поскольку я не могу выяснить, как заставить tmux показывать мне номер версии …) –  David Wolever 12.12.2011, 07:40
  • 2
    Вы, вероятно, выполняете tmux 1.3; можно, вероятно, использовать tmux server-info | head -1 видеть Вашу версию. tmux -V работы в tmux* 1.4 и позже. дорогой thinice –  Chris Johnsen 12.12.2011, 10:03
  • 3
    Это - безусловно одна из самых полезных команд tmux, которые я нашел. –  kenny 19.07.2012, 22:03
  • 4
    И если Вы уже находитесь в Вашем tmux окне и не хотите перезапускать, просто делают a [PrefixKey] : чтобы добраться до tmux командной строки и затем вставить целую строку, затем Вы просто делаете a [Prefix] P это - капитал P, и Вы хороши пойти. –  Ali 17.12.2013, 23:43
  • 5
    Действительно ли возможно иметь имя файла буферного файла tmux, сгенерированного автоматически, а не запрошенного? Так все Вы выполняете ярлык, который это сохранило бы в другой файл, например, с текущим временем в имени файла. –  user779159 16.09.2017, 15:44

У меня были стандартные привязки клавиш, которые, казалось, несколько отличались, чем в ответе @jasonwryan и ничего не изменили в конфигурации.

Ниже рецепт, который работал на меня. Возможно, Вы найдете это полезным, если Вы не захотите вносить какие-либо изменения в tmux, конфигурируют и просто хотят быстро скопировать некоторые scrollback.

Префикс == Ctrl+b в моем tmux (tmux 1.6, debian 7).

  1. Перейдите к избранному режиму: Префикс + [.
  2. Запустите выбор: Пространство.
  3. Выделите необходимый текст с помощью навигации энергии (например, используйте клавиши со стрелками или строительное стекло нажатия для достижения начала выходной истории).
  4. На самом деле копия во внутреннем использовании буфера обмена Входит. Из Вас выйдут от режима копии.
  5. Откройте любой файл с помощью энергии (вероятно, на новой tmux вкладке) и контент вставки, который Вы скопировали перед использованием Префикса +].
  6. Затем можно сделать, кошка того файла или использования произвела, как Вам нужно.
19
27.01.2020, 19:27
  • 1
    tmux помог мне разобраться в том своем tmux, был в emacs режиме, таким образом, ни одна из привязок клавиш выше обработанного. человек tmux, снова, помог мне разобраться, что использовать. Но самая большая ошибка, которую я сделал, состояла в том, что хост, от которого я сохранил содержание, не был хостом, от которого я выполнял tmux, таким образом, я продолжал искать сохраненный файл на неправильном хосте... –  Cognitiaclaeves 04.08.2017, 04:29

Вот плагин tmux, который включает следующее:

https://github.com/tmux-plugins/tmux-logging

После установки сохраните весь прокручиваемый текст с помощью префикса + alt-shift-p.

14
27.01.2020, 19:27

Для тех, кто ищет простой ответ, просто используйте префикс + : , затем введите панель захвата -S -3000 + return (Замените 3000 тем количеством строк, которое вы хотите сохранить.) Это копирует эти строки в буфер.

Затем, чтобы сохранить буфер в файл, просто используйте префикс + : еще раз и введите save-buffer filename.txt + ] return , заменив filename на что угодно.

(По умолчанию префикс равен ctrl + b .)

252
27.01.2020, 19:27

На самом деле это очень просто. Войдите в командный режим, нажав prefix key, затем :. Затем выполните capture-pane -S -<line number you want to dump>Тогдаsave-buffer <filepath>

Этот файл содержит весь вывод прокрутки. После этого вы должны удалить буфер из соображений безопасности.

8
27.01.2020, 19:27

Если вы хотите запустить что-то из командной строки (вместо использования префиксных ключей tmux ), попробуйте запустить:

tmux capture-pane -pS -1000000

Если вы запустите его и вам покажется, что он ничего не делает, это потому, что он выводит именно то, что только что было на вашем экране, поэтому он выглядит так же.

Конечно, вы также можете передать его в файл:

tmux capture-pane -pS -1000000 > file.out

См. справочную страницу tmuxи найдите capture-pane, чтобы узнать больше о том, что вы можете сделать (, например, захватить escape-последовательности, если вы хотите сохранить цвет, или указать, хотите ли вы, чтобы несколько визуальных строк соединялись, когда они не содержать новой строки)

61
27.01.2020, 19:27

How can I write all the scrollback in a tmux session to a file?

Я использую это в своем~/.tmux.conf , и теперь, когда я выхожу из работающей оболочки, вывод панели сохраняется в уникальный файл журнала:

set -g remain-on-exit
set-hook pane-died 'capture-pane -S - -E - ; save-buffer "$HOME/logs/tmux/tmux-saved.#{host_short}-#{session_id}:#{window_id}:#{pane_id}-#{pane_pid}-#{client_activity}.log"; delete-buffer; kill-pane'                        
6
27.01.2020, 19:27

Записать всю прокрутку в tmux:

tmux capture-pane -pS - > file

где ‘-’ to -S is the start of the history, как написано в мануале.


Для всех панелей в сеансе вы можете просмотреть все панели с помощью tmux list-panes -s....

4
28.06.2020, 12:57

Дамп в файл и автоматическое открытие файла вvim

Это мило:

bind-key v 'capture-pane' \; \
  capture-pane -S - \; \
  save-buffer /tmp/tmux \; \
  delete-buffer \; \
  send-keys Escape 'ddivim /tmp/tmux' Enter

Предполагается, что ваша оболочка находится в режиме vi , так что:

  • Escape переходит в нормальный режим
  • ddудаляет любую существующую команду
  • iпереходит в режим вставки
  • потом бежимvim /tmp/tmux

Протестировано в tmux 3.0.

4
25.09.2020, 08:45

Теги

Похожие вопросы