
я используюЭкранс большим количеством (более 10) локальных сессий Bash внутри. Я отправляю некоторые процессы (например vi file
, ) в фоновый режим и переключаюсь между сессиями очень часто, и иногда очень раздражает, когда обнаруживаешь, что файл, который мне нужно отредактировать, уже открыт.
Есть ли способ поделиться такими фоновыми процессами, чтобы иметь возможность доступа к ним из любого сеанса Bash внутри этого экрана?
решение1
Нет, документация дляуправление заданиями bashне упоминается какая-либо поддержка совместного использования или принятия заданий между различными сеансами bash.
Однако,рептирпозволит вам взять под контроль задание, которое было передано в фоновом режиме в другом сеансе и которое может быть достаточно близко к тому, что вам нужно.
reptyr требует pid задания, которое вы хотите взять на себя, поэтому вам нужно сначала найти этот pid. Вы можете решить для себя, будет ли это больше работы, чем просто поиск исходного окна экрана.
Похоже, вас больше всего интересует, как это сделать с помощью vim (да, вы сказали vi, но я предполагаю, что vim — это то, что вы используете под капотом). vim -r
выдаст вам список всех открытых сеансов vim, а также файлы, которые они редактируют. Прочитайте список, найдите pid, который использует нужный вам файл, и запустите reptyr <pid>
.
Если говорить точнее, vim не помешает вам просто отредактировать файл, который уже открыт в другом месте, используя vim -r <filename>
, но не забудьте перезагрузить файл снова с помощью :e
, когда вы вернетесь в исходный сеанс, чтобы ваши новые изменения были применены к последней версии. vim напомнит вам об этом при определенных событиях.
решение2
Думаю, решение вашей проблемы в другом: вам следует написать скрипт, который покажет все ваши фоновые процессы и соответствующее screen
окно.
Если это для вас вариант, я бы предложил какой-нибудь код.