Se houver um comando interno e um comando externo (programa) de mesmo nome, qual deles será executado por padrão?

Se houver um comando interno e um comando externo (programa) de mesmo nome, qual deles será executado por padrão?

bashtem um comando interno chamado kill, e também no Linux, existe um comando externo (programa) chamado kill.

Quando executo killin bash, o comando interno killé executado.

Eu tenho duas perguntas:

  1. Existe uma configuração que posso alterar para fazer com que o comando externo seja executado em vez do comando interno por padrão (sem especificar o caminho completo do comando externo, é claro).
  2. É um comportamento padrão para o comando interno ser executado em vez do comando externo por padrão em todos os shells (principais) ou é apenas uma bashcoisa?

Responder1

  1. Use envpara invocá-lo.

    $ env kill
    kill: not enough arguments
    $ kill
    kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    
  2. Todos os shells e processadores de comando.

Responder2

Para sua primeira pergunta: Sim, existe uma configuração para fazer com que o comando externo seja executado em vez do comando interno por padrão.

Você pode desligar o built-in

enable -n COMMAND

Você pode ativar o recurso integrado

enable COMMAND

ou você pode alterar a prioridade do comando. A prioridade do comando bash é:

  • aliás, é o mais alto
  • função
  • construídas em
  • comando externo em $PATH

Para sua segunda pergunta: acho que você sempre pode assumir que o comando interno é anterior ao comando externo. Não é apenas uma coisa festiva.

informação relacionada