Сохранить полное состояние сеанса экрана GNU

32

Можно ли сохранить «состояние» экранного окна GNU (или просто стандартной оболочки), чтобы я мог перезагрузить все после перезагрузки:

  • Количество открытых снарядов
  • Название каждой оболочки
  • Текущий каталог каждой оболочки
  • История каждой раковины
  • Если возможно, их переменные среды
Бартелеми
источник

Ответы:

19

На самом деле невозможно сохранить весь сеанс экрана.

Что вы можете сделать, так это создать правильную программу, .screenrcкоторая будет настраивать некоторые вещи после перезапуска системы.

Вот некоторые комментарии к вещам, которые вы перечислили:

  • Количество открытых снарядов
  • Название каждой оболочки
  • Текущий каталог каждой оболочки

Я использую что-то вроде этого в моем, .screenrcчтобы открыть некоторые конкретные оболочки при запуске:

## set the default shell
shell                   zsh

# screens
screen -t 'zsh'
screen -t 'mutt' mutt
screen -t 'zsh' /home/user/bin/scriptToRun
[..]

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

  • История каждой раковины

Вы когда-нибудь думали о том, чтобы поделиться историей снарядов во время ваших сессий? ИМХО, это делает вещи намного проще. В ZSH это сделано setopt SHARE_HISTORYв вашем.zshrc

  • Если возможно, их переменные среды

Если вам это действительно нужно и вы не хотите идти на компромисс, вы можете подумать о сценарии оболочки, который считывает текущее состояние экрана, сохраняет количество оболочек, переменные среды и т. Д. И помещает эту информацию в сценарий запуска. называется вашим .screenrc. Для меня это не стоило бы усилий, потому что я ценю чистую среду после перезагрузки, если я могу настроить окна по умолчанию для экрана.

echox
источник
Спасибо за ваши предложения. Я нашел способ поделиться своей историей на bash (не такой простой, как с zsh), поэтому у меня есть один поток команд, который сохраняется. Что касается .screenrc, я должен был подумать об этом. К сожалению, кажется, что вы можете выполнять только определенные сценарии (такие команды, как 'cd', не работают), но это должно быть хорошо. Я не против переменных среды, если я могу инициализировать оболочку с помощью скрипта.
Бартелеми
cd - это встроенная функция вашей оболочки, команда cd не имеет смысла вне «оболочки» :-) Но вы можете просто включить скрипт, который содержит cd / foo / bar после shebang. Тогда ваша новая оболочка изменится на этот каталог.
echox 14.10.10
да, я понимаю это различие, я просто подумал, что команды каким-то образом были переданы в оболочку, а затем выполнены в оболочке. Но у меня нет проблем с написанием сценариев инициализации :-) Общая история была потрясающей идеей, мне она очень нравится.
Бартелеми
10

Я наткнулся на проект под названием screen-session . Это позволяет вам сохранять и перезагружать сеансы GNU Screen в некоторой степени.

BugHunter
источник
2

Существует инструмент для замораживания состояния процесса, называемый криопид . Однако в настоящее время он не работает с экраном GNU, так как не поддерживает воссоздание иерархии подпроцессов. Они заявляют, что хотят достичь этого в будущем, но в данный момент проект не кажется слишком активным. Тем не менее, вы можете отслеживать их прогресс.

fschmitt
источник
0

Я построил похожую вещь на солярисе много лет назад. Даже не связанные с экраном; это было связано с сессией. «если $ TTY = что угодно». У echox правильная идея.

Подсказка: если вы делаете это на нескольких машинах, знайте, что каждая машина заслуживает своего собственного определения того, что должно быть сделано, когда вы входите в систему, а не все одинаковые для вашего nfs, смонтированного / home или подобного.

HTH, -pbr

PBR
источник