Похоже, вы следуете чему-то близкому к руководству по стилю Google .
File Extensions Executables should have no extension (strongly preferred) or a .sh extension. Libraries must have a .sh extension and should not be executable.
Да, порядок важен :то, что будет первым в выводе 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
.Именно такой порядок выполнения вы можете увидеть, проверив порядок каталогов в моем$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'
Это всегда возвращает только один элемент, который будет выполняться при использовании этой команды.