我正在尝试通过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);
}
感谢您的帮助!
答案 0 :(得分:0)
我在您发布此问题的chromium-hterm group中回答了
看起来你正试图将一个缓慢的事件驱动过程变成快速同步代码路径。您需要更改模型以对事件做出反应,而不是在另一侧尚未准备就绪时将输入推入管道。即。从openTerminalProcess中删除所有sendInput调用,并将所有逻辑移动到processListener。需要检查“文本”中的输出,然后确定接下来要发送的内容。
基本上你需要实现一个类似于expect的临时解析器。