在 .bash_history 文件中显示别名替换文本

在 .bash_history 文件中显示别名替换文本

鉴于我的 bash 初始化文件之一(.bash_profile 等)中有以下别名:

alias gs='git status'

如何让我的 .bash_history 文件显示替换文本:“git status”而不是别名:“gs”?

答案1

我认为这是不可能的。

我试过这个:

alias foo="echo foo;fc -e /home/hl/tmp/testscript.sh 0"
start cmd:> cat /home/hl/tmp/testscript.sh
#! /bin/bash

set -x

# simple case
#test -f "$1" || exit 1
#echo ": alias replacement : echo foo" >"$1"


# complex case
IFS= read -r line <"$1"
: line: _"$line"_
case "$line" in
        foo)
                echo ": alias replacement : echo foo" >"$1"
        ;;
        bar)
                echo ": alias replacement : echo bar" >"$1"
        ;;
        *)
                echo ": alias replacement error" >"$1"
        ;;
esac

这个想法是:运行实际命令,然后立即纠正命令历史记录,这可以通过bash内置的fc.有两个问题:

  1. fc允许您编辑文件但随后执行它。这可以通过编写虚拟命令(例如 prepend )来部分解决:

  2. 历史记录基于行而不是执行的命令。因此要修改的命令甚至还没有在堆栈上。这可能可以通过一些邪恶的黑客来解决,例如将代码放入$PS1但我不想尝试......

历史内置

可能有一种更好的方法可以与上述方法共享“尚未进入堆栈”的问题。我不知道内置的history.该命令允许写入和读取历史文件。因此可以这样做:

  1. 写入文件
  2. 修改文件,例如sedsed -i 's/^gs$/git status/' ~/.bash_history
  3. 读取文件

历史堆栈问题可以通过这种方式解决(不过我没有尝试):

alias foo="echo foo;(sleep 1; history ...) &"

相关内容