如何自动将新的bash历史记录写入更改日志文件

43次阅读
没有评论

问题描述

在每次通过ssh登录到服务器后,可能会执行一些bash命令,然后退出(hup信号?)。用户想知道是否有一种方法可以将在服务器上执行的shell命令写入某个更改日志文件中。
用户希望删除基本命令(如ls/cd)和重复命令。实际上,用户希望每个在bash中执行的命令都像这样:

eval "$(my_command | tee "$HOME/change.log")"

但用户不知道如何设置这个,是否有人知道一个好的方法来实现这个?
用户希望能够消除像ls和cd这样的命令,但同时显示每个命令的pwd:

command  (/home/ubuntu)command1 (/root/.ssh)command2 (/home/ubuntu/teros)command1 (/usr/local)command1 (/usr/local/lib)command3 (/etc)

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

尝试使用GNU Screen或Tmux。这些被称为“屏幕复用器”,但您将获得许多好处:
1. 即使断开连接或出现网络相关的连接中断,您运行的命令也将继续运行。这两个软件都允许“重新连接”到正在运行的会话。
2. 命令输出将保留在内存中。您可以启动一个长时间运行的命令,注销,然后稍后重新连接并查看命令的输出。
3. 将整个shell会话保存到文件中。您可以以纯文本格式获得您发出的所有命令以及您获得的输出的日志。

方案2

导出PS1环境变量可以实现显示命令的pwd。请注意,这种方法只能显示命令的pwd,而不能过滤掉特定的命令。
您可以在~/.bashrc~/.bash_profile中导出PS1环境变量,以实现显示命令的pwd。在这里,我们将PS1设置为:

export PS1='$(whoami)@$(hostname):$(pwd)'

这样,每次执行命令时,命令提示符将显示当前的用户名、主机名和工作目录。

请注意,这种方法只能显示命令的pwd,而不能过滤掉特定的命令。

以上是两种解决方案,您可以根据自己的需求选择适合您的方法。

正文完