在Makefile中我需要检查python2
命令是否存在,如果不存在,请尝试使用python
。目前它适用于bash / sh如下:
PYTHON?=$(type -p python2 || echo python)
(然后在make任务中使用$(PYTHON)
。)
然而,当使用fish shell时它失败了,因为它不支持||
(但需要使用or
,这在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)
^
我无法弄清楚任何适用于bash / sh和fish的方法。有什么帮助吗?
答案 0 :(得分:2)
我无法弄清楚任何适用于bash / sh和fish的方法。有什么帮助吗?
如果真的需要在fish和bash中执行此操作,则必须使用在其中一个中运行的外部脚本。
然而,由于对Makefiles大多不熟悉,我不知道为什么这需要在fish 和 bash中运行 - 你使用“用户的shell”吗?这通常是一个错误,因为这可能是任何事情(甚至像python!)。对于你的代码,你总是想要指定它需要的解释器 - 如果它在/ bin / sh中运行,使用它,如果需要bash,请使用它。如果它是红宝石,请使用它。
答案 1 :(得分:2)
好的,无效。有两个问题,但没有关系。实际上make
使用/bin/sh
(除非在Makefile中定义SHELL
变量)在Makefile本身内运行like-shell命令。
由于另一个无关的问题,它失败了,对不起噪音。
顺便说一句:
https://www.gnu.org/software/make/manual/html_node/Choosing-the-Shell.html
用作shell的程序取自变量SHELL。如果未在makefile中设置此变量,则将程序/ bin / sh用作shell。