複数回インストールした場合、どのバイナリが実行されますか?

複数回インストールした場合、どのバイナリが実行されますか?

gsettingsを設定したいので、/usr/bin/gsettingsエイリアスを作成しました。しかし、これがうまくいくかどうかはわかりません。

$ type gsettings
gsettings is aliased to `/usr/bin/gsettings'
gsettings is /home/linuxbrew/.linuxbrew/bin/gsettings
gsettings is /usr/bin/gsettings

$ which gsettings
/home/linuxbrew/.linuxbrew/bin/gsettings

別の例は次のとおりです。

$ type pandoc
pandoc is aliased to `/usr/bin/pandoc'
pandoc is /home/linuxbrew/.linuxbrew/bin/pandoc
pandoc is /usr/bin/pandoc
pandoc is /home/nikhil/.cabal/bin/pandoc

$ which pandoc
/home/linuxbrew/.linuxbrew/bin/pandoc

質問

  1. bashに入力するpandocと、pandocとgsettingsのどちらのバイナリが実行されているかを誰かが明確にできますか?gsettings

  2. コマンドの出力順序はtype意味がありますか?

ノート

$ type type
type is a function
type () 
{ 
    builtin type -a "$@"
}
type is a shell builtin

答え1

はい、順序が重要です。出力の最初の項目がtype実行される項目です。したがって、あなたの場合、エイリアスはpandoc実行され動作/usr/bin/pandocgsettingsます/usr/bin/gsettings

実際、この動作は文書化された場所を見つけることができません。最初に指定された結果がtype -a実行される項目ですが、エイリアスをオフにしてからリセットすると、その動作を確認できます。たとえば、次のようになります。

$ type -a ls
ls is aliased to `ls --color=tty'
ls is /sbin/ls
ls is /usr/bin/ls

$ unalias ls
$ type -a ls
ls is /sbin/ls
ls is /usr/bin/ls

$ alias ls='ls --color=tty'
$ type -a ls
ls is aliased to `ls --color=tty'
ls is /sbin/ls
ls is /usr/bin/ls

ご覧のとおり、エイリアスを再度追加すると最初に戻ります。比較:

$ touch ~/bin/ls; chmod 755 ~/bin/ls
$ type -a ls
ls is aliased to `ls --color=tty'
ls is /sbin/ls
ls is /home/terdon/bin/ls
ls is /usr/bin/ls

~/bin/lsエイリアスの後に(エイリアスは常に優先順位を持つ)、後続/sbin/lsおよび前に表示される新しい偽のコマンドを追加しました/usr/bin/ls。これがまさに実行順序です。 myでディレクトリの順序を調べると確認できます$PATH

$ echo "$PATH"
/sbin:/usr/sbin:/home/terdon/bin:/usr/local/bin:/usr/local/sbin:/usr/bin

/home/terdon/bin前後の/sbin状況/usr/binとこの順序が出力にどのように反映されるかを確認してくださいtype

最後に、どちらが実行されるのかを知る最も簡単な方法は、type次を実行することです-a

$ type ls
ls is aliased to `ls --color=tty'

常に1つの項目のみが返され、この項目はこのコマンドを使用すると実行されます。

関連情報