Запуск отдельного сеанса экрана, но без завершения в том же Bash
Вот уже много таких вопросов, но каждый рекомендует (вариант) следующее решение:
screen -dmS somename bash -c "/path/to/script; bash -l"
например, когда script
заканчивается, запустить новый bash
,
К сожалению, это не работает для меня, потому что
-
script
для чего-то использует переменную $BASHPID -
script
работает работает вечно, например, нужно прекратить его с помощью CTRL-C - и после завершения я должен иметь ту же оболочку, что и запускает
script
(так же$BASHPID
)
Итак, вопрос в следующем:
- Как начать
screen
в автономном режиме (например, при загрузке) - обычно это делается-dm
- он должен запустить оболочку
- лучше всего, если он может запустить его как оболочку "login", например, что читает мой
.profile
, но это можно преодолеть с помощьюsource ~/.profile
вscript
сам -
script
запустите другую (бинарную) программу, которая будет работать до CTRL-C
- лучше всего, если он может запустить его как оболочку "login", например, что читает мой
- и после прекращения
script
Я должен получить то же самоеbash
(с тем же$BASHPID
(потому что нужно запускать другие скрипты, что от этого зависит)
Короче нужно смоделировать следующую интерактивную работу:
- Начните
screen
echo $BASHPID
- run-some-команды внутри экрана (последняя работает до CTRL-C) - например, запустить
/path/to/script
- отсоединить (ctrl-a d)
После того, как выше, позже, я могу сделать
- прикрепить (
screen -ARR
) - CTRL-C
- и можно продолжать... с тем же
echo $BASHPID
# будет производить то же, что и выше
Любая идея? (думая о -X
но это не работает, где-то я, наверное, ошибаюсь)
1 ответ
Решение
Кажется, что ответ здесь для вашего случая использования. Короче:
bash --init-file <(echo "yourcommand")