运行分离的屏幕会话但没有在同一个 bash 中终止

jm6*_*666 5 shell bash gnu-screen

这里已经有很多这样的问题,但每个人都推荐(一种变体)以下解决方案:

screen -dmS somename bash -c "/path/to/script; bash -l"
Run Code Online (Sandbox Code Playgroud)

例如,当script结束时,运行一个新的bash.

不幸的是,这对我不起作用,因为

  • script$BASHPID 变量用于某事
  • script运行始终运行,如需要使用CTRL-C终止它
  • 终止后,我必须具有运行相同的外壳script(相同$BASHPID

所以,问题是:

  • 如何screen在分离模式下启动(例如在启动时) - 通常这是由-dm
  • 它必须启动shell
    • 最好的,如果它可以启动它的“登陆”的外壳,如什么读我的.profile,但这是可以与克服source ~/.profilescript自身
    • script启动一些其他的(二进制)程序究竟会持续至CTRL-C
  • 并且在终止之后script我必须得到相同的bash(相同的$BASHPID(因为需要运行另一个脚本取决于它)

总之需要模拟如下交互工作:

  • 开始 screen
  • echo $BASHPID
  • 在屏幕内运行一些命令(最后一个运行直到 CTRL-C) - 例如运行 /path/to/script
  • 分离 (ctrl-a d)

经过以上,以后,我可以做

  • 重新连接 ( screen -ARR)
  • CTRL-C
  • 并且可以继续......以同样的方式
  • echo $BASHPID #将产生与上面相同的结果

任何的想法?(考虑-X但它不起作用,我可能在某个地方犯了错误)

cst*_*mas 3

看来 这里的答案 适合您的用例。简而言之:

bash --init-file <(echo "yourcommand")
Run Code Online (Sandbox Code Playgroud)