たとえば、私が持っている
alias dbmigrate='rails db:migrate'
シェルに入力するときにBashとZshでこれを構成するパターンや簡単な方法はありますか?
$ dbmigrate # press Enter
実行する前にエイリアス拡張をエコーするのはなぜですか?
ベストアンサー1
存在する強く打つalias-expand-line
、readline関数がありますが、history-and-alias-expand-line
デフォルトではどのキーにもバインドされていません。直接バインドできますControl-T
。たとえば、次のようになります。
bind '"\C-T": history-and-alias-expand-line'
Enter
押すたびにコマンドが常に実行されるわけではないので、独自のバインドを試みることは混乱する可能性がありますEnter
(たとえば、不完全なパイプの場合など)。
もう1つ問題がありますが、DEBUG
コマンドが実際にユーザーによって入力された(たとえば、コマンドの置き換えPROMPT_COMMAND
ではPS1
難しいかもしれません)。どの実行前のコマンド:
trap 'echo "> $BASH_COMMAND"' DEBUG
bash$ pwd
> pwd
存在する扱いにくいpreexec
、ユーザーが入力したコマンドと異なる場合は、拡張コマンドを印刷する関数を簡単に定義できます。
preexec(){ [ $1 != $2 ] && print -r "> $2" }
zsh$ j
> jobs
ただし、エイリアスを強制的に拡張すると、一部のエイリアス+履歴トリックは正しく機能しません。たとえば、Escapeなどを行わずにc
このような計算を実行するためにbashにエイリアスがあります。c 3.17 * 4.2
*
(
alias c='_c=$(fc -nl -0); bc -l <<<${_c#*c} #'
readlineが展開されると、履歴の現在の行(から返された行fc -nl -0
)は次のようになります。拡大するは元のコマンドではなく、すべてが崩壊します。