跳转到内容
首页
Docs/Linux 终端

Linux 终端

PocketCode 的终端在手机上为你提供真正的 shell:运行在原生伪终端上的 BusyBox ash,以你的项目文件夹作为主目录,带有标签页、分屏和一个包含 20 个工具的面板。远程工作(SSH 主机、SFTP、端口转发)有单独的页面。

The Terminal start screen on a tablet: a Local Shell card and the Quick Connect and Browse Hosts shortcuts
终端起始页:本地 shell,加上用于远程 SSH 的快速连接和浏览主机。

它是什么,以及如何打开

终端不属于主界面五个页面(pager)之一:它以全屏浮层的形式打开在应用之上。有三种进入方式。

  1. 1点按导航栏中的 工具 按钮,在 开发工具 面板中选择 终端。
  2. 2打开命令面板并运行 打开终端(「打开终端会话」)。
  3. 3在 主页 上点按 终端 快捷操作。它是默认显示的三个快捷操作之一。
离开终端后,会话仍会继续运行。回来后,可以通过起始页上方的胶囊按钮恢复它们。在会话中点 返回 会回到起始页,而不会关闭会话。
编辑器的 运行 按钮不会打开终端,文件资源管理器没有「在此处打开终端」,终端本身也没有定义自己的键盘快捷键。

界面一览

终端由三个界面(起始页、终端、SSH)组成,它们共用同一个标签栏、同一个工具面板和同一套工具页。本页涵盖起始页、本地终端界面以及本地 shell 的全部工具;SSH 界面另有单独页面。

界面如何进入你可以做什么
起始页最先打开。在会话中点 返回 会回到这里。选择 本地 Shell、快速连接 或 浏览主机。从上方的胶囊按钮恢复正在运行的会话。
终端(本地 shell)起始页上的 本地 Shell,或某个本地会话的胶囊按钮。标签页、分屏、在输出中搜索、输入栏、手势,以及下面所有工具。
SSH 界面起始页上的 快速连接 或 浏览主机。远程标签页,配有各自的 32 个工具。详见 SSH 页面。
停靠的工具面板宽屏上自动出现(660 dp 或更宽,且未使用分屏)。一排工具图标,下方显示当前打开的工具。本地 shell 有 20 个工具。
工具菜单标签栏中的扳手按钮(更多选项),在没有停靠面板时可用。本地 shell 有六个分类、搜索操作… 和一行 常用。可以把任意工具作为全屏工具页打开。
代码片段面板工具;菜单 → 代码片段。98 条内置命令、你自己的命令、文件夹和 用 AI 生成。
命令历史面板工具;菜单 → 会话。搜索、加星标、重新运行和删除你在此标签页发送过的命令。
文件管理器面板工具;菜单 → Linux 工具。浏览文件夹,新建文件夹或文件,打印文件内容,删除(会先确认)。
Git 面板面板工具;菜单 → Linux 工具。通过 JGit 查看仓库的状态、分支、日志,并执行相关操作。
进程面板工具;菜单 → Linux 工具。列出、筛选、排序并终止进程。
系统信息面板工具;菜单 → Linux 工具。操作系统、内核、运行时间、用户,以及手机型号和 Android 版本。
磁盘使用面板工具;菜单 → Linux 工具。每个分区一张卡片,带使用率条。
网络面板工具;菜单 → Linux 工具。针对某个目标运行 ping、nslookup、traceroute、curl、wget 或 dig。
环境变量面板工具;菜单 → Linux 工具。列出、搜索、添加、编辑和取消设置变量。
别名管理器面板工具;菜单 → 会话。列出、创建、运行和删除别名。
后台任务面板工具;菜单 → 会话。列出任务、终止某个任务、把某个任务切到前台。
快捷脚本(Pro)面板工具;菜单 → 自动化。保存多行脚本并逐行运行。
键盘宏(Pro)面板工具;菜单 → 自动化。保存按键序列并发送到会话。
Expect 规则(Pro)面板工具;菜单 → 自动化。当输出中出现某个模式时,自动作出应答。
录制面板工具;菜单 → 会话 → 开始录制。把标签页录制为 asciinema .cast 文件。
会话日志面板工具;菜单 → 设置。把会话记录到加密文件,加书签、写备注并分享。
分享你的开发服务器面板工具;菜单 → 会话。为手机上运行的开发服务器提供一个临时的公开链接。
配置文件面板工具;菜单 → 安全。创建并启动终端配置文件(见限制)。
同步与团队 和 导入 / 导出面板工具;菜单 → 设置。本地面板里也有。详见 SSH 页面。
用 AI 解释输入栏中的闪光按钮,仅在输出看起来像失败时出现。用通俗易懂的语言解释最后 40 行。
复制到剪贴板?当程序请求访问你的剪贴板(OSC 52)时自动出现。复制、忽略,或在本次会话剩余时间内允许。
该命令读取凭据并向外发送数据在输入栏键入的此类命令运行之前出现。先看清它会触及什么,然后 仍然运行 或取消。

起始页

起始页是该模块的首页。它显示标题 终端 和一句话「本地 shell、远程 SSH 和 Linux 工具尽在一处」。

本地 Shell

在终端界面中打开手机上的 shell。名称下方的状态行在 BusyBox 已链接时显示 Busybox 工具就绪,只有 Android 自带 shell 可用时显示 基础 shell。

快速连接 和 浏览主机

通过快速连接或主机列表打开 SSH 界面。详见 SSH 页面。

已打开的会话

卡片上方的胶囊按钮列出仍在运行的会话,方便你跳回其中一个。

窄屏上卡片竖排成一列;宽屏上标题在左,卡片在右。在这里点 返回 会离开终端。

你可以

  • 点一下 本地 Shell,即可启动本地 shell。
  • 通过胶囊按钮恢复任何正在运行的会话,无论是本地的还是远程的。
  • 用 快速连接 或 浏览主机 跳到 SSH 界面。

你不能,以及原因

  • 全新安装后,不要完全相信 BusyBox 状态:它只在界面绘制时读取一次,而 BusyBox 是在你第一次打开 shell 时才链接的,所以在你重新打开终端之前,卡片可能一直显示 基础 shell。尚未提供

本地 shell

本地 shell 是手机上的一个真实进程,而不是对它的模拟。

  • Shell: BusyBox v1.34.1 的 ash,随应用一起提供,运行在原生伪终端上(TERM=xterm-256color,随屏幕调整大小)。如果 BusyBox 不可用,则回退到 Android 自带的 sh。
  • Applet: BusyBox 二进制文件导出 373 个 applet。第一次打开 shell 时,PocketCode 会把它们全部链接,其中有 awk、vi、sed、find、tar、gzip、unzip、wget、nc、ping、nslookup、traceroute、ifconfig、ip、netstat、top 和 less。如果这一步失败,则改为链接一份包含 70 个 applet 的核心列表。应用更新后,下次打开 shell 时会修复这些链接。
  • Node: 当构建中包含适用于你设备架构(arm64-v8a 和 x86_64)的 node 时,它会被链接进 shell,并设置 NODE_OPTIONS=--no-addons。不包含 npm。
  • 主目录: ~ 是你的项目文件夹。ls、grep 和 diff 是带颜色的别名,ll 即 ls -la(PocketCode 每次启动都会检查 shell 的 .ashrc,若有差异就恢复它)。
  • 数据库: 本地 PostgreSQL 引擎运行期间,DATABASE_URL 和 PG* 变量只在本地 shell 中设置,绝不会出现在 SSH 会话里。
  • 输出: 输出是一个行列表(每个标签页保留最后 10,000 行)。会绘制颜色和样式(16 色、256 色和 RGB 颜色,粗体、暗淡、斜体、下划线),回车符会让进度条折叠为一行,退格和制表位也能正常工作。光标移动、清屏、鼠标跟踪和其他控制序列会被丢弃。
这个 shell 以 PocketCode 自身的权限运行,所以它能看到应用的文件,就像你在这里运行的任何代码一样。它 不是沙箱。第一次使用时会有提示告诉你这一点。工具页(文件管理器等)只停留在你的项目文件夹内,从不打开存放凭据的文件夹,但这条规则只适用于应用自己的界面,不适用于 shell。
The local shell on a phone after uname -a, free -h and ls -la, with the Local Shell tab and the input bar
手机上的本地 shell
A Local Shell tab on a phone with split, search and wrench buttons, command output and the input bar with attach, previous command and send
本地 shell 标签页:标签栏、输出,以及带有附加文件、上一条命令和发送的输入栏

这里没有什么,以及原因

  • 包管理器:没有 apt、dpkg 或 pkg。应用不会安装软件包。Google Play
  • git。请使用 Git 面板(它通过 JGit 工作)或编辑器中的源代码管理。有意为之
  • python、docker、curl、ssh、scp、zip 和 nano。它们不在 BusyBox 构建中,应用也不会下载可执行文件。要连接另一台机器,请使用 SSH 界面。Google Play
  • root、chroot/proot 或 Linux 发行版:shell 只拥有应用自己的用户身份,没有更多权限。设备
  • 整屏重绘的程序,如 vi、top 或 less:由于光标移动被丢弃,它们无法以整屏方式显示。进程 中提供了 top -n 1 作为胶囊按钮。有意为之

会话、标签页与手势

每个标签页就是一个会话。标签栏由本地和 SSH 两个界面共用,但每个界面只显示自己类型的标签页。

标签页、分屏与搜索

  • + 会在此界面再打开一个本地 shell(在 SSH 界面中则打开主机列表)。
  • 长按标签页可选择 重命名 和 关闭其他标签页(远程标签页还有 复制会话)。关闭本地标签页会立即生效;关闭其他标签页会先询问。
  • 每个标签页都有一个状态点(本地标签页始终为绿色);当你在别处时某个标签页收到了新输出,它会多出一个点。记录或录制开启期间,栏中会显示 LOG 和 REC 胶囊。
  • 分屏按钮依次切换 水平拆分、垂直拆分、不拆分。第二个窗格显示下一个标签页,活动窗格有强调色边框,点按窗格即可聚焦。分屏是 Pro 功能。
  • 放大镜(搜索输出)会打开 在输出中搜索…,带有计数(「第 N / 共 M」)以及上一个、下一个按钮。它会在一行的任意位置匹配文本,忽略大小写,每个分屏窗格单独搜索。
  • 广播(把你输入的内容发送到每个已连接的标签页)和 多路复用 Shell 属于远程标签页,详见 SSH 页面。
免费版每个界面同一时间只允许一个活动会话:终端界面一个(本地 Shell 或串口),SSH 界面一个,所以本地 Shell 和 SSH 会话可以同时运行。空白或已断开的标签页不计数。在同一界面请求第二个会话(+ 按钮、已有会话时再点 本地 Shell,或复制会话)会显示 Terminal Pro,带有 解锁 Terminal Pro 和 继续使用基础版 按钮。

手势与按键

双击输出区域发送 Ctrl+C,停止正在运行的命令。
在输出区域滑动发送方向键:左右滑动移动光标,上下滑动浏览 shell 历史。
双指捏合输出区域调整文字大小,范围 8 到 24。大小会被记住。
长按输出区域弹出菜单,包含 复制此行、复制输出 和 清空终端。
点按链接网址会在浏览器中打开。
音量键在设置了 音量键导航:开 时,充当向上和向下方向键。默认关闭,开关位于工具菜单的 设置 下。

输入栏

  • 带有 发送 的单行输入框。你从这里发送的所有内容都会加入此标签页的命令历史。
  • 输入时最多出现五条建议:已知命令、此标签页历史中的命令,以及以 / 或 ~ 开头的路径(仅限本地 shell,只展开一层)。
  • 上一条命令 会沿着此标签页的历史向后翻。
  • 附加文件 用来选择文件。在本地 shell 中,它会被复制到你的项目文件夹,若重名则追加 (1)、(2),并把它的路径插入输入框。在远程标签页中,它会上传到 /tmp。
  • 当最新输出看起来像失败时,会出现 用 AI 解释(见下文)。

会话界面的限制

  • 一排额外按键(ESC、TAB、Ctrl、F1 到 F12)。你能发送的按键只有 Ctrl+C(双击)、方向键(滑动)以及宏发送的内容。尚未提供
  • 从输出中打开文件:文件路径和 file:line:column 引用会被高亮,但点按没有反应。只有网址会打开。尚未提供
  • 免费版同一界面的第二个会话,以及分屏。Pro

会话可能弹出的提示

复制到剪贴板?(OSC 52)

当会话中的程序请求把文本放到你的剪贴板上时,自动出现。

命令、脚本或远程服务器都可以请求终端复制文本。PocketCode 会先询问你,因为粘贴到终端的文本可能会执行命令。

你可以

  • 阅读「该会话想要将 N 个字符复制到剪贴板」以及文本预览。
  • 点按 复制 或 忽略。
  • 勾选 在本次会话剩余时间内允许。这个选择保存在内存中,会话结束后即被忘记。

你不能,以及原因

  • 在不询问你的情况下,让会话写入你的剪贴板。有意为之

该命令读取凭据并向外发送数据

当你从输入栏发送的命令触及凭据存储,并且还会把数据发送到某处时出现。

对话框会说明命令触及什么、数据去往何处。这是警告,不是拦截:它针对从教程复制来或由 AI 建议的命令,因为这类命令的第二个效果很容易被忽略。

你可以

  • 阅读命令所做的两件事。
  • 点按 仍然运行 发送它,或取消。

你不能,以及原因

  • 让它拦截命令,或捕获任何不经过输入栏的内容。有意为之

工具面板

除了键入命令之外,你做的大部分事情都发生在工具里。它们有两种出现方式,取决于所在的界面。

本地 shell 的 20 个工具,按面板顺序

代码片段、命令历史、文件管理器、Git 面板、进程、系统信息、磁盘使用、网络、环境变量、别名管理器、后台任务、快捷脚本、键盘宏、Expect 规则、录制、会话日志、分享你的开发服务器、配置文件、同步与团队 和 导入 / 导出。远程标签页再增加 12 个,共 32 个(见 SSH 页面)。

停靠面板

在宽屏(660 dp 或更宽)且未使用分屏时,一个 380 dp 的面板会停靠在右侧:上面是一排图标,下面是所选工具。始终会选中一个工具(第一次是 代码片段),面板会记住上一次的选择。标签栏中的 V 形箭头(收起面板)可以把它折叠起来。

工具菜单

在手机上,或开启分屏时,扳手按钮(更多选项)会打开一个菜单,其中有搜索框(搜索操作…)、一行 常用(某个操作使用两次后会出现在这里,最多六个)以及这些分类:

分类本地 shell 中的操作
会话分享你的开发服务器、分屏布局、命令历史、别名管理器、后台任务、复制输出、清空终端、开始录制
Linux 工具文件管理器、进程、网络、磁盘使用、系统信息、环境变量、Git 面板
代码片段所有片段 和八个分类快捷方式(系统、Docker、Git、数据库、安全、监控、网络、文件与文本)
自动化键盘宏、快捷脚本、Expect 规则
安全配置文件
设置会话日志、同步与团队、导入 / 导出、音量键导航:开 / 音量键导航:关

在 SSH 标签页上还有第七个分类 连接,其他分类里的操作也更多。复制输出和清空终端也在输出区域的长按菜单里。

The tools menu on an SSH tab: a search field and the categories Connection, Session, Linux Tools, Snippets, Automation and Security, each with an action count
工具菜单,这里是在 SSH 标签页上:每个分类附带其中的操作数量(本地 shell 没有「连接」分类)
  • 在宽平板上停靠面板时,找不到 音量键导航:开/关:那里不绘制工具菜单。(开启分屏后,扳手按钮会回来。)设备

Linux 工具

这些工具是你原本要键入的命令的快捷方式。它们显示的列表由一个独立的非交互式 shell 读取(每次读取上限为 15 秒和 512 KB)。你通过它们做出的修改(创建、删除、终止、导出)会作为普通命令键入到你的会话中,因此你也能在输出里看到。

文件管理器

面板工具 文件管理器;菜单 → Linux 工具。

基于 ls -la 构建的文件夹浏览器。

你可以

  • 打开文件夹,用 上一级 返回上一层。
  • 创建文件夹(新建文件夹,mkdir -p)或空文件(新建文件,touch)。
  • 点按文件,用 cat 在会话中打印它。
  • 用垃圾桶图标删除条目。会先弹出标题为 删除 <名称>? 的 删除 对话框:该文件,或该文件夹及其中所有内容,将被永久删除,没有回收站,也无法撤销。删除 确认;取消 保留。
  • 会话中输入的 rm -rf 把路径放在引号里,并对特殊字符做了转义,所以名为 $(…) 的文件会按名称被删除,而不会被执行。
  • 使用 快捷命令 胶囊按钮:du -sh *、find . -name '*.log' 和 chmod +x。

你不能,以及原因

  • 浏览项目文件夹之外的位置:浏览器止步于此,存放应用凭据的文件夹永远不会打开。有意为之
  • 撤销删除,或把删除的内容放入回收站。有意为之
  • 查看 ls -la 所打印内容之外的所有者、大小或日期。尚未提供

Git 面板

面板工具 Git 面板;菜单 → Linux 工具。

一个小型 Git 面板,有四个标签:状态、分支、日志 和 操作。在本地 shell 上它使用 JGit(没有 git 程序);在 SSH 标签页上它会把 git 命令键入远程 shell。它会从文件管理器所在的文件夹向上查找仓库,或从你的项目文件夹查找。

你可以

  • 在当前位置 初始化仓库、全部添加,以及取消暂存所有内容。
  • 写提交信息并 提交更改。
  • Push、Pull、Fetch、Stash、Stash Pop。
  • 切换分支,或用 新建分支 创建分支,以及放弃对某个文件的更改。

你不能,以及原因

  • 完整的 git diff 或 reset:本地面板不会绘制 JGit 做不到的操作。面板自己的脚注会指向编辑器中的源代码管理。有意为之
  • 从这里登录 Git 主机:push 和 pull 使用应用其他地方已设置好的凭据,失败时错误信息会显示在该页面中。有意为之
  • 处理项目文件夹之外的仓库。有意为之

进程

面板工具 进程;菜单 → Linux 工具。

正在运行的进程,用 ps 读取。

你可以

  • 查看 PID、名称、用户、CPU %、MEM % 和状态。
  • 按名称或 PID 筛选(筛选进程…)。
  • 按 CPU %、MEM % 或 PID 排序。
  • 用终止图标停止进程,这会把 kill -9 <pid> 键入会话。
  • 使用 top -n 1、ps aux --sort=-%mem | head -20 和 uptime 胶囊按钮,并刷新列表。

你不能,以及原因

  • 选择其他信号(始终是 -9),或按用户筛选。尚未提供
  • 显示进程树。尚未提供

系统信息

面板工具 系统信息;菜单 → Linux 工具。

三个卡片标签:概览(操作系统、内核、运行时间)、硬件(架构,加上你手机的型号、Android 版本和 SDK 级别)和 环境(用户和 id)。

你可以

  • 刷新卡片。
  • 使用胶囊按钮:uname -a、uptime、whoami、free -h 和 env | sort 会发送按钮上写的命令。cpuinfo 发送 cat /proc/cpuinfo,model 发送 getprop ro.product.model(找不到时退回 DMI 产品名称),$PATH 发送 echo $PATH,$SHELL 发送 echo $SHELL。

你不能,以及原因

  • 把内存、CPU 或主机名显示为单独的卡片。尚未提供

磁盘使用

面板工具 磁盘使用;菜单 → Linux 工具。

每个分区一张卡片,数据来自 df -hP,带使用率条以及 已用、可用 和 总计 大小。

你可以

  • 刷新卡片。
  • 使用 df -h、du -sh * | sort -rh | head -20 和 find / -size +100M 2>/dev/null 胶囊按钮。

你不能,以及原因

  • 查看 inode,或 df -hP 的列之外的更多信息。尚未提供

网络

面板工具 网络;菜单 → Linux 工具。

打开它会运行 ifconfig(或 ip addr)并显示结果。输出以纯等宽文本显示在该页面中,而不是会话里。

你可以

  • 选择一个工具(发送 5 个包的 ping、nslookup、traceroute、用于查看响应头的 curl、用作可达性检查的 wget、dig),输入主机、地址或 URL,然后点按 运行。
  • 使用 ifconfig、netstat -tlnp 和 ss -tuln 胶囊按钮。

你不能,以及原因

  • 在本地 shell 上运行 curl 或 dig:BusyBox 构建不包含它们,所以会以「未找到」的提示结束。Google Play
  • 运行超过 15 秒,或打印超过 512 KB 的内容。有意为之

环境变量

面板工具 环境变量;菜单 → Linux 工具。

用 env 列出的变量,可以搜索。

你可以

  • 用 新建变量 添加(名称必须以字母或下划线开头,且只能使用字母、数字和下划线)。它会以 export NAME='value' 发送。
  • 用 编辑变量 编辑,或删除它,这会发送 unset。

你不能,以及原因

  • 确保列表与你已打开的会话一致:它由另一个 shell 读取,所以你手动 export 的变量可能不会出现。有意为之

别名管理器

面板工具 别名管理器;菜单 → 会话。

会话的别名,用 alias 列出。

你可以

  • 用 新建别名 创建(名称可用字母、数字、下划线和连字符)。它会以 alias name='command' 发送。
  • 点按别名运行它,或删除它(unalias)。
  • 点按四个 建议 别名之一(ll、cls、gs、..)。gs 是 git status,本地 shell 无法运行它。

你不能,以及原因

  • 在 shell 关闭后保留别名:PocketCode 每次启动 shell 都会检查 .ashrc,若与固定模板不同就重写它,所以对它的修改不会保留。有意为之
  • 确保列表与你已打开的会话一致:它由另一个 shell 读取。有意为之

后台任务

面板工具 后台任务;菜单 → 会话。

用 jobs -l 列出的任务。没有任务时,该页面会显示「没有后台任务」和「使用命令 & 在后台运行」。

你可以

  • 终止任务(kill <pid>;pid 为 1 或更小,或应用自己的 pid,会被拒绝)。
  • 把任务切到前台(fg %N)。

你不能,以及原因

  • 看到你正在键入命令的那个 shell 的任务:列表来自另一个 shell,所以你在标签页里用 & 启动的任务通常不会出现。有意为之

代码片段与历史

可复用的命令,以及你已经运行过的命令。

代码片段

面板工具 代码片段(面板打开时默认选中的那个);菜单 → 代码片段。

98 条现成命令,分为 14 个分类,在终端第一次运行时写入,另外还有你自己的。在本地 shell 上,六条 软件包 片段会被隐藏,因此显示 92 条。

你可以

  • 按分类胶囊按钮(系统、Docker、Git、Nginx、Node/PM2、数据库、安全、部署/CI-CD、监控、网络、软件包(仅限 SSH 标签页)、文件、文本、用户、自定义)和文件夹筛选。
  • 点按片段,把它的命令放进输入栏。在你发送之前不会运行。
  • 用 新建片段 创建:名称、命令、分类、描述和文件夹。用 AI 生成 会把「查找大于 100MB 的文件」这样的一句话变成片段。它需要已连接的 AI 服务商,第一次会征求同意。
  • 把片段移到文件夹,创建或删除文件夹,以及删除片段。
  • 使用占位符:${DATE}(yyyy-MM-dd)、${DATETIME}(yyyy-MM-dd_HH:mm:ss)和 ${TIMESTAMP}(毫秒)会在你点按片段时填入。${HOST}、${USER} 和 ${PORT} 会在从已保存主机打开的标签页上填入。其他内容保持原样,已保存主机所属分组或配置文件中的环境变量除外。
  • 在免费版最多保存 10 条你自己的片段:98 条内置片段不计入上限。

你不能,以及原因

  • 在免费版保存超过 10 条你自己的片段。98 条内置片段不计入,所以 + 按钮(带有 PRO 标记)只有在你已有 10 条自己的片段时才会打开 Terminal Pro。带有片段的导入会停在同一个上限。Pro
  • 在本地 shell 上看到 软件包 片段:没有可运行它们的包管理器。Google Play
  • 在本地标签页填充 ${HOST}、${USER} 或 ${PORT}:没有主机时,它们保持键入时的样子。有意为之

命令历史

面板工具 命令历史;菜单 → 会话。

你从此标签页的输入栏发送的命令。

你可以

  • 用 搜索命令… 搜索。
  • 给命令加星标,把它保留在 收藏 下。
  • 再次运行某条命令,或删除它。
  • 点按 清除。对话框写着「这将移除此标签页历史中的所有命令。收藏将被保留。」

你不能,以及原因

  • 在标签页关闭后保留历史,或在标签页之间共享:它每个标签页只保存最后 100 条命令,且存放在内存中。有意为之
  • 看到你直接键入 shell 的内容:只记录从输入栏发送的命令。有意为之

自动化(Pro)

快捷脚本、键盘宏和 Expect 规则是 Pro 功能:限制出现在保存它们时,以及运行快捷脚本时。在免费版上,这些页面可以打开,会显示 PRO 标记,当你尝试保存时会出现 Terminal Pro。付费墙把它们列为 高级自动化(Expect 规则、Watchdog、宏)。

快捷脚本

面板工具 快捷脚本;菜单 → 自动化。

多行脚本,一键发送到会话。

你可以

  • 用 新建脚本 创建脚本(名称、描述和脚本文本),并可搜索、编辑和删除。
  • 点按 运行:每一行都会发送到会话,行与行之间间隔 150 毫秒。空行和以 # 开头的行会被跳过。

你不能,以及原因

  • 在没有 Pro 的情况下保存或运行脚本。Pro
  • 中途停止脚本,或按分类整理脚本:没有停止按钮,表单也不询问分类。尚未提供

键盘宏

面板工具 键盘宏;菜单 → 自动化。

一个命名的按键序列,以原始字节的形式发送到会话。

你可以

  • 添加宏:名称、按键序列 和可选的描述。
  • 点按宏即可发送,或删除它。
  • 在序列中使用这些转义,且只有这些:\n(回车)、\t(Tab)、\x1b(ESC)、\x03(Ctrl+C)、\x04(Ctrl+D)和 \x1a(Ctrl+Z)。

你不能,以及原因

  • 在没有 Pro 的情况下创建宏。Pro
  • 把宏按钮放到输入栏:宏只能从这个页面运行。尚未提供

Expect 规则

面板工具 Expect 规则;菜单 → 自动化。

当输出中出现某个模式时,PocketCode 会替你键入应答。规则会对每个已打开会话的输出逐行检查,一行只会由第一条匹配的规则应答。

你可以

  • 添加规则:一个 要检测的模式、使用正则表达式(关闭表示该行包含这段文本,忽略大小写;开启表示该行中任意位置能找到这个正则表达式)、一个 自动响应 和一段描述。
  • 开启或关闭某条规则,或删除它。

你不能,以及原因

  • 在没有 Pro 的情况下创建规则。Pro
  • 在响应中添加换行:PocketCode 已经会在其后按下回车(该页面写着「响应将自动发送并加上回车」),所以加 \n 会发送两次。有意为之

配置文件

配置文件是终端中最不完善的部分。把它们列在这里,是因为这个页面确实出现在面板和菜单里。

面板工具 配置文件;菜单 → 安全。

一个 终端配置文件 列表。应用自带五个:Default、Bash、Dev (Node)、Docker 和 Python Env。

你可以

  • 创建、编辑、复制和删除配置文件,并把其中一个设为默认。
  • 填写名称、shell 类型、shell 路径、工作目录、主题、字号、启动命令、环境变量、回滚行数、响铃、图标和颜色。
  • 点按 启动,打开一个标签页并发送该配置文件的启动命令。

你不能,以及原因

  • 保留配置文件:配置文件不会写入存储,所以应用重启后别指望它们还在。尚未提供
  • 让 shell 类型、主题、字体、环境变量或工作目录生效:启动 基本只做了打开标签页和发送启动命令这些事。尚未提供
  • 为 SSH 主机创建配置文件:表单里没有主机选择器。尚未提供
  • 运行出厂配置文件里的命令:Docker 和 Python 不在本地 shell 中。Google Play

录制与日志

保存会话所打印内容的两种方式。两种都是免费的。

录制

面板工具 录制;菜单 → 会话 → 开始录制。

「将会话保存为 asciinema .cast 文件,稍后可回放。」该文件为 asciicast v2 格式,命名为 session_<name>_<date>.cast,未加密。

你可以

  • 对当前聚焦的标签页执行 开始录制 和 停止录制。录制期间会显示 REC 胶囊。
  • 在 已保存的录制 下查看你的文件。
  • 也可以在 会话日志 中找到录制:它保存在同一个存储里,所以可以在那里标记和分享,并且计入 100 条的上限。

你不能,以及原因

  • 在应用内回放录制:它只会被列出。请到别处用 asciinema 回放。尚未提供

会话日志

面板工具 会话日志;菜单 → 设置。

会话所打印全部内容的纯文本日志,加密存储在设备上(AES-256-GCM,密钥保存在 Android Keystore 中)。纯文本只在记录期间存在;停止后文件即被封存。

你可以

  • 开始记录 和 停止记录。记录期间会显示 LOG 胶囊。
  • 对日志使用 标记(一颗星),添加 备注(「发生了什么、为何重要」),并显示 仅显示已标记。
  • 分享 日志:它会被解密成一份临时副本,并交给系统分享面板。

你不能,以及原因

  • 保留超过 100 份日志:最旧的会被丢弃,你标记过的除外。有意为之
  • 按文本或日期搜索日志:你只能看到每份日志的日期和已标记筛选。尚未提供

分享你的开发服务器

通往你手机上运行的开发服务器的公开链接。

面板工具 分享你的开发服务器;菜单 → 会话。

当手机上有开发服务器在运行(从项目启动)时,该页面写着「为本机 N 端口上运行的服务器生成一个公开地址」。链接通过 SSH 远程转发到 localhost.run 发出:无需账号,也无需额外软件。

你可以

  • 点按 创建链接,然后点 复制链接。如果失败,点 重试。
  • 随时点按 停止分享。开发服务器停止时,链接也会自动关闭。

你不能,以及原因

  • 没有服务器时分享:该页面会写着「目前没有运行中的开发服务器。请先打开一个项目。」有意为之
  • 保留同一个地址,或使用你自己的域名:链接是临时的(「每次都不同,停止分享即失效」),并且在分享开启期间,任何拿到它的人都能访问该服务器。第三方
  • 离线时分享。需要网络

用 AI 解释

命令失败时,用通俗易懂的语言给你帮助。

输入栏中的闪光按钮(用 AI 解释)。只有最新输出看起来像失败时才会出现。

PocketCode 会把标签页的最后 40 行(最多 8 KB)在先屏蔽密钥后发送给你已连接的 AI 服务商,并在 AI 解释 中显示回答:什么失败了、为什么,以及接下来该运行什么。它最多等待 60 秒。你使用的是自己的服务商,所以 PocketCode 不产生任何费用。

你可以

  • 阅读解释,并点按 复制解释。
  • 阅读标题下的那一行:「最后 40 行会发送给你连接的 AI 服务商,其中的密钥已被遮盖。」

你不能,以及原因

  • 在设置中没有连接 AI 服务商的情况下使用它:该页面会显示「没有收到解释。请在设置中确认已连接 AI 服务商后重试。」需要网络
  • 用按钮运行 AI 建议的命令:该页面只会显示并复制它。文本不会被保存。有意为之

外观

颜色和字体不在终端本身里设置。

  • 在 设置 的 外观 下,打开 终端外观:主题、字体、文字大小、壁纸和背景不透明度。
  • 共有 11 个终端主题,外加 跟随应用(选择器里共 12 张卡片)。五个免费(跟随应用、PocketCode Dark、PocketCode Light、Dark 和 Light),七个是 Pro(Dracula、Solarized Dark、Monokai、One Dark、Catppuccin Mocha、Gruvbox Dark 和 Nord)。从应用市场安装的终端主题也是 Pro。
  • 捏合输出区域同样可以调整文字大小(8 到 24)。

SSH、SFTP 与远程工具

SSH 界面、SFTP 以及所有远程功能都有单独的页面。它们与你刚读到的标签栏、面板和菜单共用,另外多出 12 个工具(共 32 个)。

  • 所在位置: 主机和分组、快速连接、主机密钥与键盘交互式登录、SSH 密钥(包括绑定到设备的密钥)、SFTP、端口转发、Watchdog、Webhooks、包管理器、云服务商、串口和远程桌面。
  • 同样在此面板中: 同步与团队 和 导入 / 导出 也出现在本地工具列表中。它们在 SSH 页面中介绍。在 同步与团队 中,创建、查找或加入团队房间时,Android 13 及更高版本会请求本地网络(附近设备)权限,该权限的说明和连接错误会以应用的语言显示。
  • 远程标签页上的 Pro: 第二个已保存的主机、第二个端口转发、广播、Watchdog 和 Webhooks。它们的限制见 SSH 页面。

免费版与 Pro

本地终端对哪些功能设了限制。其他一切都是免费的。

功能免费版Pro
同时活动的会话数(按界面计,终端和 SSH 各有一个名额)1 个不限
分屏不包含包含
创建键盘宏、快捷脚本和 Expect 规则(以及运行快捷脚本)不包含包含
你自己的片段最多 10 条;98 条内置片段不计入。超过 10 条后,添加或导入都会打开 Terminal Pro无上限
终端主题4 个内置,外加 跟随应用全部 11 个,外加 跟随应用,以及来自应用市场的主题
终端字体仅 DefaultDefault 外加另外 7 种
本地 shell、Linux 工具、Git 面板、历史、别名、环境变量、录制、会话日志、分享你的开发服务器、用 AI 解释、配置文件包含包含
终端中的每个 Pro 操作都会显示同一个提示:Terminal Pro,带有 解锁 Terminal Pro 和 继续使用基础版。在 SSH 标签页上,第二个已保存的主机或端口转发、广播、Watchdog 和 Webhooks 也是 Pro,详见 SSH 页面。终端中的 AI 功能使用你自己的服务商,不受限制。完整的对比表见 套餐与价格

隐私与安全

  • 本地 shell 以 PocketCode 自身的权限运行,不是沙箱。第一次使用时,会有一条提示(关于此终端)说明这一点。
  • 你的项目在 ~ 中。工具页停留在该文件夹内,从不打开存放应用凭据的文件夹。
  • 会话日志使用 AES-256-GCM 和 Keystore 密钥加密保存在设备上。录制是纯文本的 .cast 文件。分享日志会把它解密成一份临时副本。
  • 命令历史保存在内存中,每个标签页最后 100 条命令,不会写入磁盘。
  • 你从输入栏发送的命令如果读取了凭据存储并同时向外发送数据,会在运行前弹出警告。
  • 程序在没有你确认的情况下无法写入你的剪贴板(OSC 52)。
  • 本地 PostgreSQL 引擎的 DATABASE_URL 和 PG* 变量只在本地 shell 中设置,且只在引擎运行期间有效。它们绝不会发送到 SSH 会话。
  • 有意离开设备的内容:用 AI 解释 会在一次性同意后,把最后 40 行(已屏蔽密钥)发送给你连接的 AI 服务商。代码片段中的 用 AI 生成 会把你输入的那句话发送给同一个服务商。分享开启期间,分享你的开发服务器 会经由 localhost.run 转发。

限制

本地终端的主要限制,每条都附有原因。详情见上面的各节。

  • 整屏重绘的程序(vi、top、less)无法以整屏方式显示。有意为之
  • shell 中没有包管理器、git、python、docker、curl、ssh 或 zip。Google Play
  • 没有 root,也没有 Linux 发行版:shell 使用的是应用自己的用户身份。设备
  • PocketCode 运行在 64 位设备(arm64-v8a 和 x86_64)上,需要 Android 9 或更高版本。没有 32 位版本。设备
  • 免费版每个界面一次只能有一个活动会话,且没有分屏、宏、脚本或 expect 规则。Pro
  • 没有额外按键行(ESC、TAB、Ctrl、F1 到 F12),输出中的文件路径也无法打开。尚未提供
  • 配置文件不会被保存,其大部分字段不会生效;录制无法在应用内回放。尚未提供
  • 环境变量、别名和任务列表由另一个 shell 读取,而不是你打开的会话。有意为之
  • 在宽平板上停靠面板时,不显示工具菜单(及其音量键开关)。设备
  • 分享你的开发服务器 的链接是临时的,并且需要网络连接。第三方

常见问题

基础 shell

当 本地 Shell 卡片还找不到 BusyBox 的 ash 时,会显示 基础 shell。BusyBox 在你第一次打开 shell 时链接,应用更新后会再次链接,所以先打开一次本地 shell 再回来:此时它应该显示 Busybox 工具就绪。在此之前,你使用的是 Android 自带的 sh,它缺少 awk 和 tar 之类的 applet。

Terminal Pro

你请求了免费版不包含的功能:第二个会话、分屏、保存键盘宏、快捷脚本或 Expect 规则,添加第 11 条自己的片段,或在 SSH 上添加第二个已保存的主机或端口转发。继续使用基础版 会关闭这个提示;解锁 Terminal Pro 会打开付费墙。

代码片段里的 + 会打开 Terminal Pro

你已经有 10 条自己的片段,这是免费版的上限;98 条内置片段不计入。删除一条来腾出位置,或解锁 Terminal Pro。你仍然可以点按任何内置片段来使用它。

此处没有 Git 仓库

Git 面板会从文件管理器当前所在的文件夹向上查找 .git 文件夹,或从你的项目文件夹查找。请在你的项目文件夹中打开文件管理器,或点按 初始化仓库。

没有收到解释。请在设置中确认已连接 AI 服务商后重试。

用 AI 解释 需要一个带有密钥或登录的服务商。请在 AI 设置中连接一个,然后重试。它也会在 60 秒后放弃。

未能生成片段 — 请换个说法再试

用 AI 生成 期望你用一句话提出一个请求,并回复名称、一行命令和描述。请说明你想做什么,而不是你设想中的命令。

目前没有运行中的开发服务器。请先打开一个项目。

分享你的开发服务器 分享的是你的项目所启动的开发服务器。请先从项目中启动服务器;之后该页面会显示它的端口。

该命令读取凭据并向外发送数据

你即将运行的命令会触及凭据存储,并且还会把数据发送到网络。如果你是从别处复制的,请先阅读,再点按 仍然运行。

复制到剪贴板?

会话中的某个程序请求把文本放到你的剪贴板上。只有在你自己请求时,才点按 复制。

打开 shell 或连接主机后才能录制

录制 录制的是当前聚焦的标签页。请先打开本地 shell,再开始录制。

无法附加文件 / 无法准备日志以供分享

文件无法复制到会话中,或日志无法解密用于分享。请重试;如果仍然失败,请换一个文件,或停止并重新开始记录。

没有「用 AI 解释」按钮

该按钮只在最新输出看起来像失败时出现。请再次运行失败的命令,或者从最近一次失败的输出中阅读解释。

我的别名或变量在新 shell 里不见了

你从这些页面创建的别名和变量只存在于那个会话中;PocketCode 每次启动都会恢复 .ashrc。请把反复使用的命令放进快捷脚本(Pro)或代码片段里。