.bash_historyファイルにエイリアス置換テキストを表示する

.bash_historyファイルにエイリアス置換テキストを表示する

私のbash初期化ファイル(.bash_profileなど)の1つに次のエイリアスがあるとします。

alias gs='git status'

.bash_historyファイルにエイリアス「gs」の代わりに「git status」という代替テキストを表示させるにはどうすればよいですか?

ベストアンサー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 ...) &"

おすすめ記事