web-dev-qa-db-ja.com

Mac OS Xでターミナルを実行するときに、エイリアス(bashの意味で)が定義されている場所を見つける方法

システムでエイリアスが定義されている場所を確認するにはどうすればよいですか? Mac OS X(10.6.3)から起動されたターミナルセッション内で使用されるエイリアスの種類に言及しています。

たとえば、ターミナルコマンドプロンプトでパラメータなしでaliasコマンドを入力すると、設定したエイリアスのリストが表示されます。次に例を示します。

alias mysql='/usr/local/mysql/bin/mysql'

ただし、さまざまなスタートアップファイルでSpotlightとmdfindを使用してシステム全体を検索しましたが、これまでのところ、このエイリアスが定義されている場所を見つけることができません。 (私はずっと前にそれをし、エイリアスを割り当てた場所を書き留めていませんでした)。

51
Richard Fuhr

OSXの場合、この2ステップシーケンスは、私がずっと前に作成したエイリアスを見つけ、期待した場所(〜/ .zshrc)を見つけることができなかったので、うまくいきました。

cweekly:~ $ which la
la: aliased to ls -lAh

cweekly:~$ grep -r ' ls -lAh' ~
/Users/cweekly//.oh-my-zsh/lib/aliases.zsh:alias la='ls -lAh'

あぁ! ~/.oh-my-zsh/lib/aliases.zshの「非表示」。私は.oh-my-zshを少し調べましたが、lib/aliases.zshを見落としていました。

46
cweekly

コマンドプロンプトでaliasと入力するだけで、使用しているエイリアスを確認できます。それ以外の場合、エイリアスが定義されている最も一般的な場所でfindを実行できます。

grep -RHi "alias" /etc /root
30
ghostdog74

将来的には、これらは標準のbash構成ファイルです

  • / etc/profile
  • 〜/ .bash_profileまたは〜/ .bash_loginまたは〜/ .profile
  • 〜/ .bash_logout
  • 〜/ .bashrc

詳細: http://www.heimhardt.com/htdocs/bashrcs.html

14

パーティーに少し遅れましたが、同じ問題(RHEL6で「l。」コマンドがエイリアスされた場所を見つけようとしました)があり、前の回答で言及されていない場所で終わりました。すべてのbash実装で見つかるとは限りませんが、/ etc/profile.d /ディレクトリーが存在する場合は、説明のないエイリアスについてgrepを実行してみてください。それは私が見つけた場所です:

[user@server ~]$ grep l\\. /etc/profile.d/*
/etc/profile.d/colorls.csh:alias l. 'ls -d .*'
/etc/profile.d/colorls.csh:alias l. 'ls -d .* --color=auto'
/etc/profile.d/colorls.sh:  alias l.='ls -d .*' 2>/dev/null
/etc/profile.d/colorls.sh:alias l.='ls -d .* --color=auto' 2>/dev/null

ディレクトリはbashのマンページには記載されておらず、bashがプロファイル/起動情報を検索する場所の一部ではありませんが、RHELの場合、/ etc/profile内の呼び出しコードを確認できます。

for i in /etc/profile.d/*.sh ; do
  if [ -r "$i" ]; then
    if [ "${-#*i}" != "$-" ]; then
      . "$i"
    else
      . "$i" >/dev/null 2>&1
    fi
  fi
done
6
Stovey

より複雑な設定の場合(たとえば、bash-it、oh-my-zshなどのシェルスクリプトフレームワークを使用している場合)、スクリプトの重要な位置に「エイリアスmysql」を追加すると便利です。これは、エイリアスがいつ追加されるかを正確に把握するのに役立ちます。

例えば。:

echo "before sourcing .bash-it:"
alias mysql
. $HOME/.bash-it/bash-it.sh
echo "after sourcing bash:"
alias mysql
1
user1372408

答えを見つけました(正しいファイルを見つめていましたが、明らかなものを見逃していました)。

私の場合のエイリアスは〜/ .bash_profileファイルで定義されています

どういうわけかこれは私を逃した。

1
Richard Fuhr

多分これは ghostdog74 の意味に似ていると思うが、彼らのコマンドは私にとってはうまくいかなかった。

私はこのようなことを試してみます:

for i in `find . -type f`; do   # find all files in/under current dir
echo "========" 
echo $i                         # print file name
cat $i | grep "alias"           # find if it has alias and if it does print the line containing it
done

本当に空想になりたい場合は、if [[ grep -c "alias" ]] then <print file name>

0