1

我正在尝试通过 Chrome 扩展程序与 Chrome 操作系统“crosh”终端交互。我正在使用 Secure Shell 的 dev-id 来访问 chrome.terminalPrivate。从我最初的尝试中,我能够启动一个 crosh 进程和 bash shell。但是,我试图在 ~/Downloads 目录中创建一个文件,但这似乎不起作用。据我所知,该文件从未创建过。

这是到目前为止我整理的代码(我使用 Chromium 开发人员的这段代码作为起点):

// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var shellCommand = 'shell\n';
var croshName = 'crosh';

window.onload = function() {
  Crosh(null);
  commandTest();
}

function Crosh(argv) {
  this.argv_ = argv;
  this.io = null;
  this.keyboard_ = false;
  this.pid_ = -1;
}

function commandTest() {
  chrome.terminalPrivate.onProcessOutput.addListener(processListener);

  chrome.terminalPrivate.openTerminalProcess(croshName, (pid) => {
    if (pid < 0) {
      window.alert("error!");
    }

    this.pid_ = pid;

    var cmd1 = 'shell\n';
    var cmd2 = 'touch ~/Downloads/test.txt\n';

    chrome.terminalPrivate.sendInput(pid, cmd1,
      function (r1) {
        window.alert(r1);
      }
    );

    chrome.terminalPrivate.sendInput(pid, cmd2,
      function (r2) {
        window.alert(r2);
      }
    );

    chrome.terminalPrivate.closeTerminalProcess(
      this.pid_,
      function(result) {
        window.alert(result);
      }
    );
  });
}

function processListener(pid, type, text){
  window.alert(text);
}

谢谢你的帮助!

4

1 回答 1

0

我也在你发布这个问题的chromium-hterm 组中回答了

看起来您正试图将一个缓慢的事件驱动进程硬塞到一个快速同步的代码路径中。您需要更改模型以对事件做出反应,而不是在另一方尚未准备好时将输入推入管道。

即从openTerminalProcess 中删除所有sendInput 调用并将所有逻辑移至processListener。这需要检查“文本”中的输出,然后决定接下来要发送什么。

基本上你需要实现一个类似于expect的临时解析器。

于 2017-12-01T10:21:51.507 回答