Puede usar el commandshell incorporado para omitir el proceso de búsqueda normal y ejecutar el comando dado como un comando externo independientemente de cualquier otra posibilidad (shell incorporado, alias, etc.). Esto a menudo se realiza en scripts que deben ser portables en todos los sistemas, aunque probablemente más comúnmente usando la abreviatura \(como en \rmlugar de command rmo rm, ya que especialmente este último puede tener un alias a algo que no se conoce rm -i).
$ time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ command time
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
$
Esto se puede usar con un alias, así:
$ alias time='command time'
$ time
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
$
La ventaja de esto sobre, por ejemplo, alias time=/usr/bin/timees que no está especificando la ruta completa al timebinario, sino que recurre al mecanismo de búsqueda de ruta habitual.
El aliascomando en sí mismo puede entrar, por ejemplo, ~ / .bashrc o /etc/bash.bashrc (este último es global para todos los usuarios del sistema).
Para el caso opuesto (forzar el uso del shell incorporado en caso de que haya un alias definido), usaría algo como builtin time, que de nuevo anula el proceso de búsqueda habitual y ejecuta el shell incorporado nombrado. La página de manual de bash menciona que esto a menudo se usa para proporcionar una cdfuncionalidad personalizada con una función llamada cd, que a su vez usa el incorporado cdpara hacer lo real.
type -a <cmd>.commandno puentea los componentes incorporados (exceptozshcuando no emula otras capas). Omite funciones y esa es la razón principal de su existencia. Su segundo papel es eliminar el especial en construcciones especiales . Omite los alias y las palabras clave solo porque solo se expanden en la primera posición (zshpor ejemplo, no omite los alias globales). No haytimebash incorporado.timees una palabra clave para que pueda hacer por ejemplotime { foo; bar; }.commandfunciona en este caso particular, como se ejemplifica, pero obviamente una respuesta correcta es mejor que la mitad correcta.builtin timeno funciona'time' echo testHay un acceso directo en bash para eludir las palabras clave, sin tener que especificar una ruta o usar otro incorporado como
command: Escápelo con una barra invertida.Personalmente, me parece más legible y seguro, ya que esto es posible:
fuente
timehará:ti\me,'time',ti""me,ti${-##*}me,${-+time}... Esto se aplica a cualquier palabra clave cáscara.(x_x)Las soluciones generales para los elementos integrados (por ejemplo, prueba) son [1] :
uso
env(todos los depósitos)deshabilitar el incorporado (solo bash y zsh):
use cualquier barra inclinada
/para llamar al comando (todos los shells):hacer un alias (falla dentro de un script bash, excepto si
shopt -s expand_aliasesse usa):Pero el tiempo no es un tiempo incorporado.
La palabra
timees una "Palabra reservada", no un comando y tampoco una función incorporada. Eso permite estas soluciones:Cita la palabra. Esto no funciona con elementos integrados.
Muchas formas de trabajo de citas:
\time"time"'time'ti\meti"me"etc.Esto es útil para omitir un alias. Incluso si
testtiene un alias,\testejecutará el comando PATHed (o el incorporado si no se ha deshabilitado).Use el incorporado
command(esto no funciona con las funciones integradas):Como se indicó anteriormente para las
/funciones integradas, el uso de cualquier barra oblicua funciona:Como anteriormente para las incorporadas, un alias también funciona aquí:
[1] Supongamos que hay un ejecutable externo
~/bin/testque imprime "prueba externa". Y además: supongamos que~/binestá por delante/binen la RUTA activa.fuente
Deja esto en tu
~/.bashrc:alias time=/usr/bin/timefuente
Puede usar el
enablecomando para deshabilitar ciertos elementos integrados.Sin embargo,
timees una palabra clave, por lo que no funcionará.Entonces te queda crear un alias para anularlo:
fuente