/ / mismo comando fish and bash para detectar el nombre ejecutable de Python - bash, shell, fish

el mismo comando fish and bash para detectar el nombre ejecutable de Python - bash, shell, fish

Dentro de un Makefile necesito verificar si python2 comando existe y, si no, intente con solo python. Actualmente funciona para bash / sh de la siguiente manera:

PYTHON?=$(type -p python2 || echo python)

(y luego usar $(PYTHON) dentro de hacer tareas).

Sin embargo, falla cuando se usa caparazón de pescado porque no es compatible || (pero en su lugar requiere el uso or, que no funciona en bash / sh):

foo@bar ~> echo $(type -p python2 || echo python)

Unsupported use of "||". In fish, please use "COMMAND; or COMMAND".
fish: echo $(type -p python2 || echo python)
^

No puedo entender ningún enfoque que funcione tanto para bash / sh como para fish. ¿Alguna ayuda, por favor?

Respuestas

2 para la respuesta № 1

No puedo entender ningún enfoque que funcione tanto para bash / sh como para fish. ¿Alguna ayuda, por favor?

Si tu De Verdad Necesito hacer esto en fish y bash, tendrás que usar un script externo que se ejecute en uno de los dos.

Sin embargo, como no estoy familiarizado con los Makefiles, no tengo idea de por qué esto tiene que correr en los peces. y bash - ¿estás usando "el shell del usuario"? Eso suele ser un error, porque podría ser cualquier cosa (¡incluso cosas como Python!). Para su código, siempre querrá especificar el intérprete que necesita, si se ejecuta en / bin / sh, use eso, si necesita bash, usa eso. Si es ruby, usa eso.


2 para la respuesta № 2

OK, inválido. Hubo dos problemas, pero no relacionados. De hecho make usos /bin/sh (a no ser que SHELL la variable se define en el Makefile) para ejecutar comandos like-shell dentro del Makefile.

Estaba fallando debido a otro problema no relacionado, lo siento por el ruido.

Por cierto:

https://www.gnu.org/software/make/manual/html_node/Choosing-the-Shell.html

El programa utilizado como shell se toma de la variable SHELL. Si esta variable no está configurada en su archivo MAKE, el programa / bin / sh se utiliza como shell.