使用来自Chrome扩展程序的crosh创建文件[terminalPrivate.sendInput]

时间:2017-11-27 00:53:38

标签: bash google-chrome google-chrome-extension google-chrome-app crosh

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

以下是我到目前为止编写的代码(我使用Chromium开发人员的code作为起点):

// 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);
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我在您发布此问题的chromium-hterm group中回答了

看起来你正试图将一个缓慢的事件驱动过程变成快速同步代码路径。您需要更改模型以对事件做出反应,而不是在另一侧尚未准备就绪时将输入推入管道。

即。从openTerminalProcess中删除所有sendInput调用,并将所有逻辑移动到processListener。需要检查“文本”中的输出,然后确定接下来要发送的内容。

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