
私の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
。
fc
ファイルを編集して実行できます。これは、prependなどのダミーコマンドを作成することで部分的に解決できます:
。履歴は、実行されたコマンドではなく行に基づいています。したがって、変更するコマンドはまだスタックにありません。コードを挿入するなどの邪悪な方法で解決される可能性がありますが、
$PS1
試したくはありません...
組み込みの歴史
上記の方法では、「まだスタックにない」問題を共有するより良い方法があるかもしれません。内蔵機能についてはよくわかりませんhistory
。このコマンドを使用すると、履歴ファイルの書き込みと読み取りができます。だからこれはうまくいきます:
- ファイルの書き込み
- たとえば、ファイルを変更します
sed
。sed -i 's/^gs$/git status/' ~/.bash_history
- ファイルを読む
履歴スタックの問題は、次の方法で解決できます(試していません)。
alias foo="echo foo;(sleep 1; history ...) &"