web-dev-qa-db-ja.com

不正なエイリアス宣言を見つけるにはどうすればよいですか?

特定のaliasが宣言されている場所を見つけようとしています。エイリアスを探すために、私が知っている通常の場所をすべて検索しました。

  • 〜/ .bashrc
  • 〜/ .bash_profile
  • / etc/bashrc
  • / etc/profile

運が悪い。

aliasだと知っています。which COMMANDを実行すると、次のようになります。

alias COMMAND='/path/to/command'
    /path/to/command

aliasの名前だけがわかっているaliasを宣言しているファイルを見つける方法はありますか?

38
user3520

問題のあるalias/etc/profile.d/で調べます。

次の方法で検索することもできます。

grep -r '^alias COMMAND' /etc

これは、alias COMMANDで始まる行を探すファイルを再帰的にgrepします。

他のすべてが失敗した場合、これを~/.bashrcの最後に置きます

unalias COMMAND
32
utopiabound

試すことができることがいくつかあります。

  1. bash -vを使用して、シェルの起動時に読み取られている行を確認します
  2. シェルの起動中に実行されているコマンドを確認するには、bash -xを使用します
  3. スタートアップファイルを1つだけ使用して実行する

bash -v

-vオプションを指定すると、bashは、読み取るすべてのスクリプトファイルから各行を印刷します。

実行することから始めます

bash -i -v >bash-i.out 2>&1

5-10秒待ってから、 Ctrl+C

これにより、bash-i.outと呼ばれる単一のファイルが作成されます。これは、すべてのスタートアップファイルがマージ(または連結)されたものと同じです。

次に、lessを使用してファイルを開き、/aliasnameを使用してエイリアスを検索します。

次に、そのエイリアスがファイル内の他の行との関係でどこにあるかを比較します。たとえば、ほとんどのシステムでは、/etc/bash.bashrcの上部に/etc/bash.bashrc~/.bashrcのコメントが上部にあります。

~/.bashrcの上にある場合、それはおそらくエイリアスを定義している/etc内の起動ファイルです。それ以外の場合は、~/.bashrcまたはsourceまたは.(ドットコマンド)を介して含まれているファイル内にあります。

エイリアスが表示されない場合は、

bash -l -v >bash-l.out 2>&1

これは、bashにログインシェルであることを伝えます。ログインシェルは、/etc/profile~/.bash_profileではなく/etc/bash.bashrc~/.bashrcなどのいくつかの異なるスタートアップファイルを読み取ります。

bash -x

bash -vで明確な答えが得られない場合は、シェルが読み取っている行ではなく、シェルが実行しているコマンドを出力するbash -xを実行してみてください。

メソッドは基本的に上記と同じですが、-v-xに変更します。 (必要に応じて両方を併用できます。)

1つのスタートアップファイルのみで実行

bash -i --rcfile="$HOME/.bashrc"

エイリアスがあるかどうかを確認します。

システムでrcfile/etc/bash.bashrcに設定して同じことを試してください。

次に試してください

bash -l --rcfile="$HOME/.bash_profile"

名前にprofileが含まれているすべてのbashスタートアップファイルについても同じようにします。 $HOME/.bash_profile/etc/profileに変更します。

どちらの方法でエイリアスを表示しても、見始める必要のあるファイルがわかります。

27
Mikel

多分あなたの.xinitrc?また、.bashrcまたは.bash_profileそれらの他のファイルをソースします。たとえば、次のコマンドで参照される別のファイルにすべてのエイリアスを保持します。

[ -f ~/.bash_alias ] && source $HOME/.bash_alias

役立つかもしれないいくつかの質問:これは通常のユーザーですか、それともrootユーザーですか?それはどのコマンドですか? Linuxの味は?

2
SigueSigueBen

私はエイリアス定義を次の場所に置くという非常に一般的な慣習に従っています

~/.bash_aliases

そしてそれを.bashrcから次のように呼び出します

[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases
0
Michael Durrant