用于检测python可执行文件名的相同fish和bash命令

时间:2017-03-29 19:29:36

标签: bash shell fish

在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的方法。有什么帮助吗?

2 个答案:

答案 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。