
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 builtin
para 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, \source
o 'source'
o ''source
o... (a menos que haya definido alias para aquellos que también zsh
lo permiten, pero no para otros shells).
Las funciones se pueden omitir con el command
prefijo (por ejemplo command source
, ) en cualquier shell POSIX. En bash o zsh puede usar builtin
en lugar de command
para forzar el uso de una función integrada ( command
recurre a una PATH
búsqueda si no hay una función integrada con ese nombre, y en zsh (excepto cuando se emula otros shells), command
se 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.command
unset