Вам потрібно screen -R -d
автоматично приєднатись до існуючого сеансу, якщо такий існує, і створити сеанс інакше.
Переконайтеся, що ви робите це лише на інтерактивних оболонках . Bash-джерела ~/.bashrc
навіть для неінтерактивних оболонок, коли його батьківський процес rshd або sshd (про це йдеться в документації, але це легко пропустити). Ви можете сказати, що оболонка є інтерактивною, оскільки $-
містить i
.
case $- in
*i*) screen -Rd;;
esac
Це не дозволить вам запускати різні сеанси екрана в різних терміналах.
Вам потрібно буде відірватися від екрана, а потім вийти з батьківської оболонки, щоб вийти. Це можна вирішити, використовуючи exec screen
замість screen
.
Якщо ви запустите оболонку, відмінну від оболонки для входу, вас перейдуть на екран, а це не те, чого ви хотіли б більшість часу. Я хоч би обмежувався цим, коли ви працюєте безпосередньо в інтерактивному сеансі ssh, у своєму творі щось подібне ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Будьте обережні, коли ви робите складні речі зі своєю, .bashrc
оскільки помилка, яка викликає вихід оболонки, ускладнить вхід.
Я рекомендую не змінювати файли ініціалізації оболонок на сервері, а замість цього явно запускати екран із клієнта, як у
ssh -t host.example.com screen -R -d
(Ви, мабуть, створите псевдонім оболонки або ярлик середовища для робочого столу на клієнті.) Таким чином, ви можете легко вибрати не запускати екран, вказати альтернативну назву сеансу тощо.