ll
などのエイリアスは、alias
コマンドで定義されます。
type ll
のようなものでコマンドを確認できます
ll is aliased to `ls -l --color=auto'
またはcommand -v ll
と表示されます
alias ll='ls -l --color=auto'
またはalias ll
も出力します
alias ll='ls -l --color=auto'
whereエイリアスが定義されている、つまり.bashrc
などのファイルが見つからない、または実行中のシェルで手動で見つけることができないようです。現時点では、これが可能かどうかはわかりません。
bash
によってロードされたすべてのファイルを調べ、それらのすべてをチェックする必要がありますか?
シェルに何をしているのかを表示するように依頼すると、手動での定義(おそらく履歴ログ)を見つけるのが難しくなります。その場合、grep
はrcファイルで設定されたものを見つけるのに役立ちます。
bash -ixlc : 2>&1 | grep ...
zsh -ixc : 2>&1 | grep ...
シェルが上記の呼び出しの1つ(対話的にnullコマンドを実行する)で必要なオプションを正確にキャプチャしていない場合は、script
:
script somethingtogrep thatstrangeshell -x
...
grep ... somethingtogrep
別のオプションは、strace
またはsysdig
のようなものを使用して、シェルが接触するファイルを検索allし、手動でgrep
に移動することです(シェルまたはプログラムの場合に便利です) -x
フラグがありません);標準のRCファイルは、oh-my-zshまたはサイト固有の構成のようなものがどこにあるかを知っている人からコードを引き込んでいる場合(または、srontarが回答で指摘しているように、環境変数もある場合)の手動のファイル名チェックには十分ではありません。 。
ここで私はgrep -rl
が非常に便利だと思います:
grep -rl alias ~/.bash* ~/.profile /etc/profile /etc/bash.bashrc
word alias
がどのファイルで使用されているかがわかります。
おそらく~/.bashrc
にあり、存在する場合は最も確実に~/.bash_aliases
にあります。
ただし、それがすべてのオプションをカバーしていることを完全に確認することは不可能です。これらのファイルは、他のファイルを呼び出したり、読み込んだりすることもあります。 ENVや$BASH_ENV
などの環境変数は、bashに他のいくつかのファイルをロードするように指示する場合があります。
環境内で変数BASH_ENVを探し、そこに表示されている場合はその値を展開し、展開された値を読み取りおよび実行するファイルの名前として使用します。
そして、変数を設定することでエイリアスを定義することもできます(私の強調):
BASH_ALIASES
メンバーがエイリアスのビルトインによって維持されるエイリアスの内部リストに対応する連想配列変数。 この配列に追加された要素はエイリアスリストに表示されます
エイリアスのソースを実際に一覧表示する方法はわかりませんが、bashを使用しているように見えるため、これらは可能なソースファイルだと思います。
/etc/profile
~/.profile
/etc/bash.bashrc
~/.bash_profile
~/.bashrc
それらを介してgrepを実行してエイリアスを見つけることができるはずです。 grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc
。
thrig's answer と @ MarkPlotnickの提案 を組み合わせて、BASH_ALIASES[ll]
で絞り込むように設定されています。 BASH_SOURCE
配列とLINENO
変数は、ここでは特に便利です。残念ながら、BASH_ALIASES[ll]
が設定されると、エイリアスが設定された後にのみ成功するため、そのような最初の行が完全に別のファイルにある可能性があります。
PS4='${BASH_ALIASES["ll"]+"The ll alias has been defined before"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |&
grep 'll alias' -m1 -B1
次のような出力を与える:
/home/muru/.bash_aliases:1 alias 'll=ls -AlhF'
TThe ll alias has been defined before /home/muru/.bashrc:116 alias 'ping=ping -c5'
このチェックを使用してシェルを終了することもできます。
$ PS4='${BASH_ALIASES["ll"]+"$(kill -9 $$)"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |& tail -n1
/home/muru/.bash_aliases:1 alias 'll=ls -AlhF'
which
を使用するだけで成功しました。
[crclayton@pc scripts]$ which foo
foo: aliased to python $HOME/projects/python/foo.py