如何使用命令
命令如何运行

已存档
yeenhexlvf · 23 天前

回答

Hamibot AI
1
· 23 天前

在 Hamibot 中使用 Shell 命令

Hamibot 提供了多种方式来执行 Shell 命令,主要用于与 Android 系统进行底层交互。以下是详细的使用方法和注意事项。


1. 一次性执行单条命令(推荐使用 shell() 函数)

适用于仅需执行一次命令的场景,每次调用 shell() 都会启动一个新的 Shell 进程并执行命令。

语法:
var result = shell(cmd, root);
  • cmd:要执行的命令(字符串)。
  • root:是否以 root 权限运行,默认为 false
返回值:

返回一个对象,包含以下属性:

  • code:返回码,执行成功为 0,失败为非 0
  • result:命令的标准输出(stdout)。
  • error:命令的错误输出(stderr)。
示例:
// 强制停止微信
var result = shell("am force-stop com.tencent.mm", true);
log(result);

if (result.code === 0) {
    toast("执行成功");
} else {
    toast("执行失败!请查看错误信息:" + result.error);
}

2. 多次执行命令(推荐使用 Shell 对象)

适用于需要多次执行命令的场景,通过 Shell 对象可以复用同一个 Shell 进程,提高效率。

语法:
var sh = new Shell(root); // 创建 Shell 对象
sh.exec(cmd);              // 执行命令
sh.exit();                 // 退出 Shell 进程
  • root:是否以 root 权限运行,默认为 false
  • exec(cmd):执行命令(异步、非阻塞)。
  • exit():退出当前 Shell 进程。
示例:
var sh = new Shell(true); // 以 root 权限运行
sh.exec("am force-stop com.tencent.mm"); // 强制停止微信
sh.exit(); // 退出 Shell

3. 监听命令输出(使用 setCallback

如果需要实时查看命令执行的输出结果,可以使用 setCallback 方法绑定回调函数。

语法:
sh.setCallback({
    onOutput: function(output) {},  // 每次有输出时调用
    onNewLine: function(line) {}    // 每次有新行输出时调用
});
示例:
var sh = new Shell();

sh.setCallback({
    onNewLine: function(line) {
        log(line); // 实时输出每一行结果
    }
});

sh.exec("ping -c 4 www.hamibot.com"); // 执行 ping 命令
sh.exit(); // 退出 Shell

4. 注意事项

  • 权限问题:某些命令需要 root 权限才能执行(如修改系统设置、强制停止系统应用)。如果你不确定是否需要 root 权限,可以先尝试不加 true 参数,如果报错 Permission denied 再加上。

  • 异步执行Shell.exec() 是异步执行的,不会等待命令完成就继续执行后续代码。如果你需要等待命令执行完毕,目前只能通过 shell() 函数实现。

  • 命令格式:确保命令格式正确,尤其是与 ampm 等命令相关的参数。例如:

    • 启动微信:am start -n com.tencent.mm/.ui.LauncherUI
    • 卸载应用:pm uninstall com.example.app
  • 调试建议:在调试过程中,建议使用 log() 输出结果,或通过 setCallback 监听输出,以便快速定位问题。


总结

方法 适用场景 是否异步 是否复用 Shell 进程 推荐使用场景
shell(cmd, root) 单次执行 简单、快速执行单条命令
Shell 对象 多次执行 需要连续执行多条命令,提高效率
setCallback 实时监听输出 需要查看命令执行过程的输出

如需进一步帮助,请参考 Hamibot 官方文档 或发送邮件至 support@hamibot.cn

ℹ️ 本回答由 AI 生成,内容仅供参考