Если есть внутренняя команда и внешняя команда (программа) с одинаковым именем, какая из них будет выполнена по умолчанию?

Если есть внутренняя команда и внешняя команда (программа) с одинаковым именем, какая из них будет выполнена по умолчанию?

bashимеет внутреннюю команду, называемую kill, а также в Linux есть внешняя команда (программа), называемая kill.

При выполнении killв выполняется bashвнутренняя команда .kill

У меня два вопроса:

  1. Есть ли настройка, которую я могу изменить, чтобы внешняя команда выполнялась вместо внутренней по умолчанию (конечно, без указания полного пути к внешней команде).
  2. Является ли стандартным поведением выполнение внутренней команды вместо внешней по умолчанию во всех (основных) оболочках, или это просто особенность bash?

решение1

  1. Используйте envдля его вызова.

    $ env kill
    kill: not enough arguments
    $ kill
    kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    
  2. Все оболочки и командные процессоры.

решение2

На ваш первый вопрос: да, есть настройка, позволяющая по умолчанию выполнить внешнюю команду вместо внутренней.

Вы можете отключить встроенную функцию

enable -n COMMAND

Вы можете включить встроенную функцию

enable COMMAND

или вы можете изменить приоритет команды. Приоритет команды bash:

  • псевдоним, это самый высокий
  • функция
  • встроенный
  • внешняя команда в $PATH

На ваш второй вопрос: я думаю, вы всегда можете предположить, что внутренняя команда предшествует внешней команде. Это касается не только bash.

Связанный контент