【问题标题】:Run commands in screen after creating one per bash在每个 bash 创建一个后在屏幕中运行命令
【发布时间】:2015-02-27 21:33:36
【问题描述】:

我有以下 bash 文件,它应该创建一个屏幕,转到一个目录,然后启动一个节点脚本:

screen -S shared     // 1
cd /home/nodejsapp   // 2
node start.js app.js // 3

问题是,执行 1 后,我确实看到了“共享”屏幕,但是 2 & 3 会在之前的终端上执行,而不是在“共享”屏幕上。

如何实现命令 2 和 3 将在当前屏幕上执行?

【问题讨论】:

    标签: linux bash ubuntu gnu-screen


    【解决方案1】:

    您可以创建一个detached 屏幕,然后向它发送命令。例如:

    screen -d -m -S shared
    screen -S shared -X -p 0 stuff $'cd /home/nodejsapp\n'
    screen -S shared -X -p 0 stuff $'node start.js app.js\n'
    

    如果之后需要附加到screen 会话,则可以再添加一行:

    screen -S shared -r
    

    更多详情请参阅screen的手册:

    【讨论】:

      【解决方案2】:

      您可以将“服务器”作为屏幕中的程序运行,它从“tty”程序识别的伪终端读取要执行的命令。例如,当我写这篇文章时,tty 说(屏幕内)

      /dev/pts/2
      

      我可以给它写信

      date >/dev/pts/2
      

      在服务器端,脚本将从同一设备循环读取。 (在其他一些系统上,有不同的名称 伪终端每一侧的设备)。

      只需要一个脚本,该脚本首先获取“tty”的输出,将其写入文件(相应的客户端会知道),然后客户端会读取命令(无论是从键盘还是文件) , 通过 pty 设备将它们写入服务器。

      只需几个 shell 脚本就可以做到(虽然比这里通常的答案要长一点)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-05
        • 2017-12-20
        • 2017-05-19
        • 2022-01-18
        • 2021-09-14
        • 2011-08-31
        • 2013-01-14
        相关资源
        最近更新 更多