【问题标题】:Click button and send command to execute on xterm.js terminal单击按钮并发送命令以在 xterm.js 终端上执行
【发布时间】:2020-11-20 10:44:21
【问题描述】:

我想单击一个按钮并发送一个 linux 命令,例如“ls”,以便在 xterm.js 终端上执行。有没有办法做到这一点?

用 Go 编写的 Pty 伪终端远程运行,我使用 xterm.js 作为前端组件。

【问题讨论】:

    标签: javascript terminal pty xtermjs


    【解决方案1】:

    这样的事情应该处理上面提到的情况

    在 HTML 中

    <button (click)="runCmd('ls')>ls</button> 
    

    在 app.component.ts 中

    假设有一个 websocket 服务器正在监听这里提到的端点......

    public runCmd(command){
      var url = "ws://<ip>:<port>/pty"
      var terminal = new Terminal()
      terminal.open(document.getElementById("terminalDiv");
      var socket = new WebSocket(url);
      var attachAddon = new AttachAddon(socket);
      terminal.loadAddon(attachAddon);
    
      //socket.send() will send the data passed to it. 
      socket.send(command);
    }
    

    【讨论】:

    • 有什么方法可以与终端会话进行真正的对话?
    • 关于用于 web socket 的 url 显示错误的任何想法?
    【解决方案2】:

    我用 Python 从应用程序向嵌入式 xterm.js 终端发送命令做了同样的事情,我推荐的一件事是设置它,这样您就可以发送原始命令而无需特殊转义。

    我发现了这个 javscript “heredoc” 函数,它允许我将原始复杂的多行 oneliners 毫无问题地发送到 xterm.js。把它留在这里,以防其他人发现它有用。

        @QtCore.pyqtSlot(QtCore.QModelIndex)
        def run_command_via_js_double_click(self, signal):
            # send a command to the server
            script = """
            var cmd = (function() {/*%s*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
                wssh.send(cmd);
            """ % cmd_replaced
            self.currentWidget().page().runJavaScript(script)
    

    可以在下面查看它的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-23
      • 2023-03-10
      • 2018-08-11
      • 1970-01-01
      • 2016-04-05
      • 2019-10-21
      • 2011-09-30
      • 2021-09-22
      相关资源
      最近更新 更多