我想享受 bash 历史命令查找的好处,但我在 ssh 连接到的多个主机上工作。但是,由于安全策略,我在大多数远程服务器上都没有主目录,所以那里没有~/.bash_history
。export HISTFILE=/tmp/blah
不适用于当前会话。即使我在那里有一个文件,它也应该通过某个本地文件在多个远程服务器上同步。
解决方案可能应该是这样的:
通过.ssh/config
或alias
以某种方式,在每个 ssh 命令周围执行某些操作,例如
scp .remote-history user@remote:/tmp/history
ssh user@remote
scp user@remote:/tmp/history .remote-history.add
cat .remote-history.add >> .remote-history
除非存在可以做类似事情的现有工具。
答案1
这个脚本(remote_run)应该可以做你想做的事。它可以变得更漂亮,但是......
https://gist.github.com/wwalker/c2677ec6dfef31cdaecad855e3f4df60
像这样运行它:
remote_run 远程主机名
当你退出时,它将覆盖(因此不要对同一主机同时进行两次 remote_run,也不要以保存了历史记录的最后一个为准)你的本地文件 ~/.bash_history-remote_hostname
#!/bin/bash
# version 0.0.1
LOCALHISTFILE=/tmp/$USER.history.$$;
read -d '' RUN << EOF
export HISTFILE=$LOCALHISTFILE;
export HISTTIMEFORMAT='%F %T - '
bash -i;
awk '{print \"HIST \"\$0}' \$HISTFILE;
EOF
ssh $1 "cat > $LOCALHISTFILE" < ~/.bash_history-$1
ssh -t $1 "$RUN" | tee /tmp/$USER-remote-history
grep '^HIST ' /tmp/$USER-remote-history | sed -e 's/^HIST //' -e 's/^M//' > ~/.bash_history-$1