ネストされたエイリアスがあり、コマンドを実行する前にすべてのエイリアスを確認したいと思います。どうすればいいですか?
どのキーにもバインドされていない機能がある場合は、M-x foobar
私も大丈夫です。外部コマンド(、、、など)も使用できますtype
。スレッド内のすべてを試しました。command
which
「which」を使わないのはなぜですか?それでは何を使うべきですか?しかし、何も動作しません。
ベストアンサー1
Ctrl-Alt-Eは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
エイリアスは、現在のコマンドラインが構文的に有効な場合にのみ拡張されます(したがって、構文チェッカーとしても機能します)。
MCEとは異なり、エイリアスもbash
完全に解決します。たとえば、次のような場合があります。
$ 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