
Я использую iTerm2 и понял, что когда я использую screen: ssh -t [имя пользователя]@[домен].edu 'screen -DR'
Я заметил следующие странности:
Я не могу использовать мышь для прокрутки вверх и вниз в окне iTerm2
Я не могу использовать ctrl-a для перехода в начало строки
Я не могу использовать ctrl-e для перехода в конец строки
Мой ~/.bash_profile не является исходным файлом
Я уверен, что есть и другие, но как мне сделать так, чтобы поведение было таким, как будто я просто подключился по SSH без сеанса Screen?
решение1
Упомянутые вами сочетания клавиш реализованы в оболочке Bash. Если они не работают, это, скорее всего, означает, что вы по какой-то причине не используете Bash в качестве оболочки – хотя немного странно, что Screen запускает другую оболочку, нежели SSH:
- Проверьте,
~/.screenrc
есть ли в вашем файле команды «shell» или «defshell». - Проверьте, является ли оболочка, указанная
getent passwd $USER
в последнем поле, /bin/bash. - Проверьте,
printenv SHELL
соответствует ли (внешний экран) тому, чтоgetent
сообщается.
В некоторых системах, если ваша фактическая оболочка входа настроена на что-то странное, вам может потребоваться вручную указать Screen использовать bash с помощью shell bash
настройки screenrc. (Например, возможно, что на вашем сервере на самом деле /bin/sh является оболочкой учетной записи пользователя, но sh ~/.profile затем настроен на запуск /bin/bash поверх. В этом случае оболочка 'sh', запущенная Screen, не будет читать ~/.profile и не перейдет к bash.)
Ваш ~/.bash_profile не будет использоваться для оболочек, не являющихся "login". Внешняя оболочка, которую вы запустили Screenотбыла оболочкой «входа»; те, что находятся внутри Screen, обычно не предназначены для входа, и ожидается, что они будут загружать только ~/.bashrc, но не какие-либо скрипты «профиля» — это сделано для того, чтобы каждое новое окно Screen не запускало без необходимости то, что уже было запущено исходной оболочкой.
Вместо этого следует указывать такие вещи, как псевдонимы и функции ~/.bashrc
, но можно использовать настройку «shell» в screenrc, чтобы принудительно запустить оболочку в режиме «login», добавив к ее команде префикс -
, например -bash
.
Стандартная прокрутка на основе терминала не будет работать с мультиплексорами, такими как Screen или tmux, и это отчасти задумано: мультиплексор является собственным эмулятором терминала и управляет внешним терминалом более напрямую, где текст не так важен.прокрутитькак естьстерто и перезаписано.
Например, если сеанс Screen имеет две панели, разделенные по горизонтали, текст из нижней панели должен быть явно стерт, когда он собирается прокрутиться за пределы видимости, в противном случае на верхней панели останется мусор. (Как будет работать обратная прокрутка, если сеанс Screen имеет две панели, разделенные по вертикали?)
Из-за этого Screen обычно настроен на преднамеренное переключение внешнего терминала в режим «альтернативный экран», отключая прокрутку iTerm2 на время. Вы можете попробовать использовать настройку altscreen off
в screenrc, чтобы предотвратить это, но не ждите, что прокрутка iTerm будет иметь смысл.
Вместо этого вы можете войти в «режим копирования» Screen, используя кнопку , Ctrl-a[чтобы иметь возможность прокручивать определенную панель.