Запуск отдельного сеанса экрана, но без завершения в том же 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
  • и после прекращения 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")
Другие вопросы по тегам