/ / stesso comando fish e bash per il rilevamento del nome dell'eseguibile python - bash, shell, fish

stesso comando fish e bash per il rilevamento del nome dell'eseguibile python - bash, shell, fish

All'interno di un Makefile devo verificare se python2 comando esiste e, in caso contrario, provare con solo python. Attualmente funziona per bash / sh come segue:

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

(e quindi usando $(PYTHON) all'interno delle attività make).

Tuttavia fallisce quando si utilizza la shell di pesce perché non supporta || (ma invece richiede l'uso or, che non funziona in 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)
^

Non riesco a capire nessun approccio che funzioni sia per bash / sh che per il pesce. Qualche aiuto per favore?

risposte:

2 per risposta № 1

Non riesco a capire nessun approccio che funzioni sia per bash / sh che per il pesce. Qualche aiuto per favore?

Se tu veramente devi farlo sia in fish che in bash, dovrai usare uno script esterno che gira in uno dei due.

Tuttavia, essendo per lo più non pratico con i Makefile, non ho idea del perché questo debba essere eseguito nei pesci e bash - stai usando la shell "dell'utente"? Questo di solito è un errore, perché potrebbe essere qualsiasi cosa (anche cose come Python!). Per il tuo codice, vuoi sempre specificare l'interprete di cui ha bisogno - se viene eseguito in / bin / sh, usa quello, se è ha bisogno di bash, usa quello. Se è rubino, usa quello.


2 per risposta № 2

OK, non valido. C'erano due problemi, ma non erano correlati. Infatti make usi /bin/sh (salvo che SHELL variabile è definita nel Makefile) per eseguire comandi like-shell all'interno del Makefile stesso.

Stava fallendo a causa di un altro problema non correlato, mi dispiace per il rumore.

BTW:

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

Il programma usato come shell è preso dalla variabile SHELL. Se questa variabile non è impostata nel tuo makefile, il programma / bin / sh viene usato come shell.