2013-02-16 2 views

ответ

4

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

screen действительно кажется, есть грубое приближение поиска истории (она просто ищет буфера прокрутки для командной строки см. Страница screen людей под командой «историй» (связанную с C-a { по умолчанию).

+1

Вы имеете в виду от другого окна в той же сессии (или, возможно, от другой сессии)? Возможно. Это предполагает разбор буфера прокрутки целевого окна. Я не достаточно хорошо знаком с экраном, чтобы узнать, как получить доступ к программному обеспечению. Вы можете попробовать прочитать справочную страницу для получения информации о том, как это сделать. – chepner

2

Когда вы exit терминал (или оболочка) оболочка пишет свою историю $ HISTFILE, поэтому, чтобы получить свою историю в другом терминале можно ввести exit в терминале вы хотите историю и будет записано.

cat $HISTFILE 
#or tac, less, $EDITOR, ... depending on how you want to "access" it 
+0

Разве это написано только на 'exit'? – hexacyanide

+1

AFAIK, до тех пор он хранится в памяти до $ HISTSIZE строк, когда он пишет, он сохраняет файл истории в строки $ HISTFILESIZE max – technosaurus

+0

Я забыл про 'shopt -s histappend', см. Http: //unix.stackexchange.com/questions/6501/why-would-any-not-set-histappend-in-bash – technosaurus

1

@technosau rus прав. $ HISTFILE записывается при выходе bash, поэтому вы можете выйти из одного сеанса bash и начать новый, и история должна быть сохранена через файл.

Но я думаю, что есть лучший способ решить вашу проблему. Руководство bash содержит описание history built-in command. Он позволяет вам сохранить эту историю с history -w [filename] и прочитать историю с history -r [filename]. Если вы не укажете имя файла, оно будет использовать $ HISTFILE.

Таким образом, я бы предложил сохранить историю внутри сеанса экрана в конкретном файле (или если вы хотите использовать HISTFILE по умолчанию). Затем прочитайте файл истории в другом сеансе bash, из которого вы хотите получить доступ к истории. Таким образом, вам не нужно выходить из исходной сессии bash.

21

Я использую стандартную оболочку bash в своей системе и поэтому не могу работать с другими оболочками.

это то, что у меня есть в моем ~/.screenrc файле, так что каждое новое окно экрана получает свою собственную историю команд:

Экрана по умолчанию для Windows с Командованием Историей

Чтобы открыть набор экрана по умолчанию окна, каждый с их собственной истории команд файла, можно добавить следующее в файл: ~/.screenrc

screen -t "window 0" 0 bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash' 
screen -t "window 1" 1 bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash' 
screen -t "window 2" bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash' 

новы для Windows получить свой собственный Command History

Настройки экрана по умолчанию означают, что вы создаете новое окно с использованием Ctrl+a c или Ctrl+a Ctrl+c. Однако, только с приведенным выше в вашем файле ~/.screenrc, они будут использовать файл ~/.bash_history по умолчанию. Чтобы исправить это, мы перезапишем привязки клавиш для создания новых окон.Добавьте к этому файлу ~/.screenrc:

bind c screen bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash' 
bind ^C screen bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash' 

Теперь, когда вы создаете новое окно экрана, это на самом деле запускает Баш оболочку, установив переменную окружения HISTFILE к чему-то, что включает в себя номер текущего окна экрана ($WINDOW).

Файлы истории команд будут совместно использоваться сеансами экрана с одинаковыми номерами окон.

Запись Команды $HISTFILE об исполнении

Как это нормальное поведение баш, история пишется только в файл $HISTFILE путем при выходе из окна оболочки/экрана. Тем не менее, если вы хотите, команды должны быть записаны в файлы истории после того, как команда будет выполнена, и, таким образом, доступны сразу на другой экран сессий с тем же номером окна, вы можете добавить что-то вроде этого в файл ~/.bashrc:

export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}" 
+0

Это ближе всего к тому, что я хотел бы, но ... пытаясь найти способ сохранить все это в один файл истории. 'HISTSIZE' и т. Д., Похоже, не вставляются, если вы вставляете их в команду' screen' выше. – beroe

1

history покажет всю команду истории.

0

использование этого: экран -L с заглавной L он будет хранить копию терминала ввода и вывода в файл с именем screenlog.0 или если вы используете -S, чтобы назвать его, файл журнала получает экран имя

+0

Но обратите внимание: это регистрирует выход так же, как и вход. – abalter

0

Я ставлю следующие строки в моем .bashrc:

case "$TERM" in 
    screen) 
     declare SCREEN_NAME=$(echo $STY | sed -nr 's/[^.]*\.(.*)/\1/p') 
     if [[ $SCREEN_NAME ]]; then 
      HISTFILE="${HISTFILE}.${SCREEN_NAME}.${WINDOW}" 
      declare -p HISTFILE 
     fi 
     unset SCREEN_NAME 
     ;; 
    *) 
     ;; 
esac 

Мой .bashrc по умолчанию имеет этот «случай» в основном с «XTerm * | rxvt *)» значение, так что я только добавил свой «экран 'часть в нее. Если у вас нет этого «дело», вы можете использовать следующий вместо этого:

if [[ $TERM == screen ]]; then 
    declare SCREEN_NAME=$(echo $STY | sed -nr 's/[^.]*\.(.*)/\1/p') 
    if [[ $SCREEN_NAME ]]; then 
     HISTFILE="${HISTFILE}.${SCREEN_NAME}.${WINDOW}" 
     declare -p HISTFILE 
    fi 
    unset SCREEN_NAME 
fi 

И после того, как у меня есть собственного bash_history для все окна моего всего экрана.

Примечание: это не работает в chroot!

Смежные вопросы