Недетерминированное поведение в bash-скрипте для открытия и именования окон экрана

У меня есть следующий скрипт bash для настройки сеанса экрана с четырьмя окнами из командной строки в 13.10. Комментарии указывают на то, что я думаю, что это должно сделать.

screen -dmS mysession # start screen, name the session 'mysession'
screen -S mysession -p 0 -X exec echo -ne "\ekserver\e\\" # name the first window 'server'
screen -S mysession -p 0 -X exec screen # start a second window
screen -S mysession -p 1 -X exec echo -ne "\ekvim 1\e\\" # name second window 'vim 1'
screen -S mysession -p 1 -X exec screen # start a third window
screen -S mysession -p 2 -X exec echo -ne "\ekvim 2\e\\" # rename third window 'vim 2'
screen -S mysession -p 2 -X exec screen # start a fourth window
screen -S mysession -p 3 -X exec echo -ne "\ekconsole\e\\" # name fourth window 'console'

Каждый второй или третий раз, когда я запускаю его, я получаю именно то, что хочу: четыре окна, каждое из которых названо так, как у меня здесь. В остальное время я получаю где-то от одного до четырех окон, некоторые из них названы правильно, в других случаях по умолчанию используется имя bash. Почему я вижу это поведение и как его исправить?

Между каждым его запуском я проверяю, завершился ли сеанс экрана, набирая exit в каждом окне и проверяя screen -ls, чтобы убедиться, что сеансы экрана не активны.

РЕЗУЛЬТАТ: Из комментария «chris» на этой странице у меня теперь есть точечный файл для конкретного проекта, который я вызываю из .screenrc, используя source .projectscreenrc - когда файл В настоящее время он содержит screen -t команд, как указано в ответе Гленна Джекмана. Когда его нет, экран работает как обычно. Я все еще не уверен, почему это работает и почему мой оригинальный подход не сработал, но это намного чище.

2
задан 26 January 2014 в 15:10

1 ответ

Не отвечая на ваш вопрос, но вот как я бы использовал экран таким образом:

Поместите это в свой ~/.screenrc:

screen -t server
screen -t vim_1
screen -t vim_2
screen -t console

Каждый раз, когда вы хотите войти в экран, используйте screen -DR - это создаст сеанс экрана, если он не существует, или присоедините его, если он запущен.

0
ответ дан 26 January 2014 в 15:10

Другие вопросы по тегам:

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