Si hay un comando interno y un comando externo (programa) con el mismo nombre, ¿cuál se ejecutará de forma predeterminada?

Si hay un comando interno y un comando externo (programa) con el mismo nombre, ¿cuál se ejecutará de forma predeterminada?

bashtiene un comando interno llamado kill, y también en Linux, hay un comando externo (programa) llamado kill.

Cuando ejecuto killen , se ejecuta bashel comando interno .kill

Tengo dos preguntas:

  1. ¿Existe alguna configuración que pueda cambiar para que se ejecute el comando externo en lugar del comando interno de forma predeterminada (sin especificar la ruta completa del comando externo, por supuesto)?
  2. ¿Es un comportamiento estándar que el comando interno se ejecute en lugar del comando externo de forma predeterminada en todos los shells (principales), o es solo una bashcosa?

Respuesta1

  1. Úselo envpara invocarlo.

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

Respuesta2

A su primera pregunta: Sí, hay una configuración para hacer que se ejecute el comando externo en lugar del comando interno de forma predeterminada.

Puedes desactivar el incorporado

enable -n COMMAND

Puedes activarlo mediante

enable COMMAND

o puede cambiar la prioridad del comando. La prioridad del comando bash es:

  • alias, es el más alto
  • función
  • incorporado
  • comando externo en $PATH

A su segunda pregunta: creo que siempre se puede asumir que el comando interno es anterior al comando externo. No es sólo una cuestión de bash.

información relacionada