Ctrl-Alt-E in bash
はエイリアスを展開するだけではないことに注意してください。また、変数、コマンド置換(!)、プロセス置換(!)、算術展開、引用符の削除(ファイル名生成(グロビング)またはチルダ展開は行いません)も展開します。
常にエイリアスを展開できるとは限りません。そのため、その用途はありますが、その結果がコマンドラインの意味を潜在的に変え、副作用があり、潜在的に危険であることを認識することが重要です。
例えば:
$ a=';w' b=1
$ alias foo=bar
$ b=2; echo $b $a; cd /tmp/dir && for i do foo $(pwd) <(ls); done
M-C-E
ここを押すと、次のようになります。
$ b=2; echo 1 ;w; cd /tmp/dir && for i do foo / /dev/fd/63; done
これにより、まったく異なるコマンドラインが提供され(上記のrm -rf *
代わりに持っていたらどうなるか想像してくださいpwd
)、foo
エイリアスは展開されません。
と zsh
、関数内で展開されたエイリアスに関するGillesのメモを作成するには、次のようにします。
expand-aliases() {
unset 'functions[_expand-aliases]'
functions[_expand-aliases]=$BUFFER
(($+functions[_expand-aliases])) &&
BUFFER=${functions[_expand-aliases]#$'\t'} &&
CURSOR=$#BUFFER
}
zle -N expand-aliases
bindkey '\e^E' expand-aliases
これは、現在のコマンドラインが構文的に有効な場合にのみエイリアスを展開します(したがって、構文チェッカーとしても機能します)。
bash
のMCEとは異なり、エイリアスも完全に解決します。たとえば、次の場合:
$ alias ll='ls -l'; alias ls='ls --color'
$ ll
に展開されます:
$ ls --color -l
次のような構文も正規化することに注意してください。
$ for i (*) cmd $i; foo
次のように変更されます:
$ for i in *
do
cmd $i
done
foo
C-x a
カーソルの下のエイリアスを展開します(補完システムを使用している場合)。