You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ARM设备SSH命令历史存储至本地并支持快捷调用?

这个问题太戳痛点了——那种每次重启就清空命令历史的无持久化ARM设备,折腾几次真的让人头大。除了记事本记命令,有几个更优雅的方案,能让你像用本地shell一样用^R搜索、上下箭头翻历史:

方案1:用rlwrap给SSH套个历史记录壳(最简单,亲测好用)

这是我最推荐的方法,rlwrap是个轻量工具,专门给没有readline支持的终端程序补上命令历史、搜索、编辑功能,正好适配你的场景:

  • 安装它:Linux上用包管理器(比如sudo apt install rlwrap或sudo dnf install rlwrap),macOS直接用brew install rlwrap。
  • 连接设备时,把ssh命令用rlwrap包起来:rlwrap ssh user@your-arm-device。
  • 效果拉满:你在远程输入的所有命令都会存在本地的~/.rlwrap/ssh_history里,完全支持^R搜索历史、上下箭头切换命令,操作逻辑和本地shell一模一样。
  • 进阶偷懒:给它整个别名,在~/.bashrc或~/.zshrc里加一行:alias ssh-arm='rlwrap ssh user@your-arm-device',之后直接敲ssh-arm就能连。
方案2:手动写脚本,无额外工具依赖

如果不想装新工具,用SSH+bash环境变量就能实现双向同步:

  1. 先在本地建个专门存这个设备命令历史的文件:touch ~/.ssh/arm_device_history
  2. 打开~/.bashrc(或~/.zshrc),加一个自定义函数:
ssh-arm() {
    # 本地历史文件路径
    local LOCAL_HIST="$HOME/.ssh/arm_device_history"
    # 远程临时历史文件(设备重启会清空,不影响)
    local REMOTE_HIST="/tmp/remote_history"

    # 连接前把本地历史推到远程,刚连上去就能看到之前的命令
    scp "$LOCAL_HIST" "$1:$REMOTE_HIST" 2>/dev/null || true

    # 启动远程bash,指定历史文件,保留readline功能
    ssh -t "$1" "HISTFILE=$REMOTE_HIST; HISTCONTROL=ignorespace:ignoredups; exec bash -i"

    # 退出后把远程新命令拉回本地,合并保存
    scp "$1:$REMOTE_HIST" "$LOCAL_HIST" 2>/dev/null || true
}
  1. 之后连接设备直接敲:ssh-arm user@your-arm-device。
  • 原理:每次连接前同步本地历史到远程临时目录,远程bash用这个文件存历史;退出时再把新命令拉回本地,下次连接就能复用。
方案3:轻量管道记录(适合临时用)

如果只是想记录命令,不需要实时在远程翻历史,可以用管道直接把远程命令输出写到本地:

ssh -t user@your-arm-device 'HISTFILE=/dev/stdout bash -i' | tee -a ~/.ssh/arm_history
  • 局限性:这个方法没法在远程会话里用上下箭头看历史,但会把所有输入的命令存在本地文件里,之后可以用cat ~/.ssh/arm_history查看,或者把内容复制到远程执行。

内容的提问来源于stack exchange,提问作者Artalus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:25:17