エイリアスが定義された場所を確認することはできますか?


24

などのエイリアス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'

私は見つけることができないようどこすなわち、エイリアスが定義されたようなファイル.bashrc実行しているシェルで、またはおそらく手動で。この時点で、これが可能かどうかはわかりません。

ロードされたすべてのファイルを単純にbash調べて、それらすべてをチェックする必要がありますか?


カフを離れて私は実行すると言うだろうbash -xl
ジェフシャラー

回答:


21

手動での定義(履歴ログなど)grepを見つけるのは難しいでしょうが、シェルに何をしているのかを尋ねると、rcファイルでそれらを見つけやすくなります。

bash -ixlc : 2>&1 | grep ...
zsh -ixc : 2>&1 | grep ...

上記の呼び出しのいずれか(シェルで対話的にnullコマンドを実行する)で必要なオプションをシェルが正確にキャプチャしていない場合、次のようになりますscript

script somethingtogrep thatstrangeshell -x
...
grep ... somethingtogrep

別のオプションは、シェルのようなすべてのファイルを見つけるstraceか、シェルのようなすべてのファイルsysdigを見つけて手動で移動することです(シェルまたはプログラムにフラグがない場合に便利です)。oh-my-zshやサイト固有の構成のようなものがどこを知っている人からコードを引き込んでいるか(またはsorontarが答えで指摘しているように環境変数があるかもしれません)、手動のファイル名チェックには標準のRCファイルでは不十分です。grep-x


ありがとう!出力の解析は少し難しいですが、探しているエイリアスを定義したファイルが見つかりました。エイリアスがそのリストのどこにも存在しない場合、エイリアスが手動で定義されたと想定しても安全ですか?
ポレモン

@polemonはやや安全です。それは、誰が何を知っているか、または削除されたために読み込まれないファイルで定義される可能性があります(特に、ユーザーがしない複雑さを追加する何らかのシェルフレームワークがある場合)わかる)。
-thrig

1
別名を見つけるのは少し簡単に定義されたポイントを作るために、あなたはPS4を使用することができ、トレース内のすべての行の前に追加された:PS4='+The ll alias is "${BASH_ALIASES["ll"]}" ' bash -ixlc :
マーク・Plotnick

5

ここでgrep -rl非常に便利だと思います:

grep -rl alias ~/.bash* ~/.profile /etc/profile /etc/bash.bashrc

どのファイルで単語aliasが使用されているかがわかります。

おそらくにおける~/.bashrc最も確かで~/.bash_aliases、それが存在する場合。


しかし、それがすべてのオプションをカバーすることを絶対に確信することは不可能です。これらのファイルは、他のファイルを呼び出したりロードしたりすることもあります。ENVなどの環境変数、または$BASH_ENVbashに他のファイルをロードするよう指示する場合があります。

環境内で変数BASH_ENVを探し、値が表示されている場合はその値を展開し、展開された値を読み取りおよび実行するファイルの名前として使用します。

また、変数を設定することでエイリアスを定義することもできます(強調強調)

BASH_ALIASES
エイリアス組み込みによって維持されるエイリアスの内部リストに対応するメンバーを持つ連想配列変数。この配列に追加された要素は、エイリアスリストに表示されます


grep -rl alias ~/.bash*誤って履歴ファイルに一致する可能性がありますが、BASH_ALIASES配列を示すために+1があります!
ジェフシャラー

2

エイリアスのソースを実際に一覧表示する方法はわかりませんが、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


またはそこからファイルが含まれています...
ジェフシャラー

@JeffSchaller-そうです、あなたが言ったようにbash -x、もっと複雑なものが必要です。上記は簡単に実行できるほど簡単で、エイリアスが見つからない場合は実行手順を読むことができると考えました。
エダエモン

1

thrigの回答@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'

0

単にを使用して成功しましたwhich

[crclayton@pc scripts]$ which foo
foo:     aliased to python $HOME/projects/python/foo.py

1
whichtcsh(およびおそらく以前のcsh)およびzshのエイリアスを組み込みで処理できます。また、RedHatファミリのデフォルトプロファイルを使用してbashで(外部)GNUプログラムを実行しますが、シェルエイリアスデータをフィードします。 。さらに重要なのは、エイリアスが設定されている場所ではなく、エイリアスの設定内容のみを伝えることです。ここでのQです。
dave_thompson_085


-1

最終的にll、次の2つのシェルスクリプトでWebサーバー(CentOS)のエイリアス定義を見つけました/etc/profile.d/

  • /etc/profile.d/colorls.csh
  • /etc/profile.d/colorls.sh

システム全体のプロファイルがあった上記のコメントから最初に学ぶことでそれを見つけました/etc/profile。システム全体のエイリアスがで定義されていること、そのファイルの状態/etc/bashrc、そしてそれはのいくつかのシェルスクリプトをループしていること、そのファイルIソーでは/etc/profile.d/、と私が使用してgrep最終的にはそのディレクトリ内や定義を発見しました。また、l.すべてのドットファイルをリストするエイリアスがあることも発見しました。

からcolorls.sh

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

(に同等のエイリアスがありますcolorls.csh。)


-1

最初に次のコマンドを使用します

すべての機能をリストする

functions 

すべてのエイリアスをリストする

alias 

エイリアスまたは関数が見つからない場合は、より積極的な検索方法を検討してください

Bashバージョン

bash -ixlc : 2>&1 | grep thingToSearchHere

Zshバージョン

zsh -ixc : 2>&1 | grep thingToSearchHere

オプションの簡単な説明

-i     Force shell to be interactive.

-c     Take the first argument as a command to execute

-x      -- equivalent to --xtrace

-l      Make bash act as if invoked as a login shell
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.