Bash trata el incorporado time
como un caso especial, al analizar líneas de comando.
Como se puede leer en la página de manual de bash, la línea escrita se divide primero en una lista:
pipeline ; pipeline
donde está una tubería:
[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]
o en nuestro caso, simplemente:
time command
es decir, si el tiempo está presente, entonces el comando también debe estar presente.
[Hay un caso especial que permite time
ser seguido por una nueva línea, pero eso no se aplica aquí]
Entonces, en nuestro caso, tenemos:
time;date
dividido en dos tuberías:
1. time
2. date
y la tubería 1 no está bien formada, ya que tenemos time
sin un comando. De ahí el error.
Tenga en cuenta que la línea de comandos time
tampoco funciona aquí:
$ /usr/bin/time;date
Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose]
bash analiza esto como se esperaba, en 2 canales:
1. /usr/bin/time
2. date
y /usr/bin/time
luego se niega a correr sin argumento. Tenga en cuenta que este es un error de /usr/bin/time
no un error de bash.
La razón por la que funciona el retroceso es que el retroceso deja de time
ser interpretado como un elemento especial dentro de la tubería.
es decir, con la marca de retroceso:
`time`;date
se analiza como dos tuberías:
1. `time`
2. date
Recuerde que una tubería, en nuestro caso, es:
[time] command
y el problema inicialmente fue que teníamos time
sin comando, lo cual no está permitido Pero ahora simplemente tenemos el comando:
`time`
sin lo anterior time
, ya que los ticks de retroceso significan que time
se interpreta como el comando, no como una palabra anterior.
Entonces bash ejecuta su construcción time
sin argumentos, lo cual es aceptado. No produce salida, y no vemos ningún error.
Tenga en cuenta que:
`time`
en realidad ejecuta el resultado del time
incorporado, es decir, ejecuta lo que el time
incorporado produce en stdout. Pero dado que time
por sí solo no escribe nada para stdout, parece funcionar.
Finalmente, se ha notado que esto funciona:
time ; ; date
que no puedo explicar, lamentablemente :)
time;date
contradate;time
. Esto parece ser un problema con la canalizaciónbash
y el último carácter generado con latime
salida. Los resultados probados en diferentes emuladores de terminal son: - [Bash] $ date; time # [OK] $ time; date # [ NotOK ] bash: error de sintaxis cerca del token inesperado `date '$ time # solo el error no parece ser el resultado de cualquier fecha. - [Csh] $ date; time # [OK] $ time; date # [OK] - [Tcsh] $ date; time # [OK] $ time; date # [OK] - [Ksh] $ date; time # [ OK] $ time; fecha # [OK]