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
質問
bashに入力する
pandoc
と、pandocとgsettingsのどちらのバイナリが実行されているかを誰かが明確にできますか?gsettings
コマンドの出力順序は
type
意味がありますか?
ノート
$ type type
type is a function
type ()
{
builtin type -a "$@"
}
type is a shell builtin
答え1
はい、順序が重要です。出力の最初の項目がtype
実行される項目です。したがって、あなたの場合、エイリアスはpandoc
実行され動作/usr/bin/pandoc
しgsettings
ます/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つの項目のみが返され、この項目はこのコマンドを使用すると実行されます。