Какой двоичный файл будет запускаться при наличии нескольких установок?

Похоже, вы следуете чему-то близкому к руководству по стилю 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.

1
30.06.2020, 14:28
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.Именно такой порядок выполнения вы можете увидеть, проверив порядок каталогов в моем$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'

Это всегда возвращает только один элемент, который будет выполняться при использовании этой команды.

2
18.03.2021, 23:23

Теги

Похожие вопросы