No se puede utilizar la palabra clave `time` en la acción de la regla Makefile

No se puede utilizar la palabra clave `time` en la acción de la regla Makefile

Tengo un Makefile simple:

correr :
	tiempo eco foo

Aquí está el resultado cuando lo uso:

$ make run
time echo foo
make: time: Command not found
make: *** [Makefile:2: run] Error 127

¿Por qué no funciona? Según tengo entendido, timees la palabra clave en bash(a menos que también haya instalado eltime programa, que no tengo), y Makefilelo usa shcomo shell predeterminado, pero lo tengo vinculado de forma simultánea a bash. Aquí hay otros resultados relevantes:

$ type -a time
time is a shell keyword
$ bash --version
GNU bash, version 5.0.7(1)-release (x86_64-pc-linux-gnu)
$ ls -l "$(which sh)"
lrwxrwxrwx 1 root root 4 Apr 30 05:13 /usr/bin/sh -> bash
$ make --version
GNU Make 4.2.1
$ ls -l /bin
lrwxrwxrwx 1 root root 7 May 23 10:18 /bin -> usr/bin
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Apr 30 05:13 /bin/sh -> bash
$ /bin/sh -c 'time true'

real    0m0.000s
user    0m0.000s
sys     0m0.000s

editar: tenga en cuenta también que /binestá vinculado simultáneamente a /usr/bin, por lo que el problema no se debe a una distinción entre /bin/sh y /usr/bin/sh. También estoy usando Arch Linux, con la última pacman -Syuactualización a partir de hoy 28 de junio de 2019.

Además, aquí está el resultado de un volcado hexadecimal del Makefile:

$ xxd Makefile
00000000: 7275 6e20 3a0a 0974 696d 6520 6563 686f  run :..time echo
00000010: 2066 6f6f 0a                              foo.

Respuesta1

Tener shun enlace simbólico a bashno significa que invocar shserá equivalente a invocar bash.

Esto es lo queArchiwikidice:

When Bash, mksh and zsh are invoked with the sh name, 
they automatically become more POSIX compliant.

Eso significa que algunas funciones no estarán disponibles y aun así deberás elegirlas bashcomo shell en tu Makefilesi necesitas las funciones de bash.

Agregue esto como la primera línea para Makefileelegir bashcomo shell:

SHELL := /bin/bash

Esto debería resolver tu problema.

Puede encontrar más información sobre la elección del caparazón enla documentación de GNU Make

información relacionada