Cómo ejecutar específicamente un comando incorporado de Shell

Cómo ejecutar específicamente un comando incorporado de Shell

Considere una situación en la que ejecuto estos comandos en mi shell actual o los coloco dentro .bashrc:

alias source='echo hi'
alias .='echo hi'
alias unalias='echo hi'

O function source(){ echo hi; }, etc.

En el caso de comandos binarios, podemos usar una ruta absoluta como: /bin/ls, sin embargo, ¿cómo puedo ejecutar específicamente cualquiera de estos comandos integrados del shell dentro de mi shell actual?

Respuesta1

Bash tiene el comando builtinpara eso:

builtin: builtin [shell-builtin [arg ...]]
Execute shell builtins.

Execute SHELL-BUILTIN with arguments ARGs without performing command
lookup.  

P.ej

$ cat > hello.sh
echo hello
$ source() { echo x ; }
$ source hello.sh
x
$ builtin source hello.sh
hello

Sin embargo , nada le impide anular builtin.

Otra forma de evitar alias (pero no funciones) es citar (parte de) la palabra:

$ alias source="echo x"
$ source hello.sh 
x hello.sh
$ \source hello.sh
hello

Respuesta2

Los alias siempre se pueden omitir citando cualquier parte del nombre del comando, por ejemplo, \sourceo 'source'o ''sourceo... (a menos que haya definido alias para aquellos que también zshlo permiten, pero no para otros shells).

Las funciones se pueden omitir con el commandprefijo (por ejemplo command source, ) en cualquier shell POSIX. En bash o zsh puede usar builtinen lugar de commandpara forzar el uso de una función integrada ( commandrecurre a una PATHbúsqueda si no hay una función integrada con ese nombre, y en zsh (excepto cuando se emula otros shells), commandse omite las funciones integradas por completo). Puede desarmar una función con, por ejemplo unset -f source, .

Si anuló o deshabilitó todos y builtin, es posible que deba abandonar la idea de restaurar esta instancia de shell a un estado razonable.commandunset

información relacionada