Makefile计算两个变量,然后使用非空的一个

问题描述 投票:0回答:1

我有一个运行CoreELEC(类似于LibreELEC的Linux发行版)的电视盒,我想找到其IP地址,然后使用SSH登录。

我知道以太网接口和Wifi接口的MAC地址。

假设我不知道电视盒当前使用哪个接口连接到LAN,我想在我的LAN(以太网或Wifi)中找到电视盒的IP地址。

以下目标列表不起作用,因为它在评估“ OR”时失败:

TVBOX_IP=""

find-tvbox-eth-ip:
    @echo Checking the Ethernet IP address...
    $(eval TVBOX_ETH_IP=$(shell sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_ETH_MAC) | awk '{print $$1}'))
    @echo Found an Ethernet IP address: "$(TVBOX_ETH_IP)"

find-tvbox-wifi-ip:
    @echo Checking the Wifi IP address...
    $(eval TVBOX_WIFI_IP=$(shell sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_WLAN_MAC) | awk '{print $$1}'))
    @echo Found a Wifi IP address: "$(TVBOX_WIFI_IP)"

find-tvbox-ip: find-tvbox-eth-ip find-tvbox-wifi-ip
    @[ "$(TVBOX_ETH_IP)" ] && TVBOX_IP:=$(TVBOX_ETH_IP) || ( echo TVBOX_IP:=$(TVBOX_WIFI_IP) )
    @echo "Stored this IP for the TV BOX: " $(TVBOX_IP)

包含TVBOX_IP := $(or $(TVBOX_ETH_IP),$(TVBOX_WIFI_IP))的类似目标也无法正常工作。

  • 确保变量值首先来自以太网检查,然后来自Wifi检查之后,如何在其他目标中使用变量$(TVBOX_IP)
  • 上面的Makefile目标有什么问题?

我有一个运行CoreELEC(类似于LibreELEC的Linux发行版)的电视盒,我想找到其IP地址,然后使用SSH登录。我知道两个以太网接口的MAC地址...

makefile gnu-make
1个回答
0
投票

有时,将逻辑转移到外部命令更容易。进行声明式方法有时很难控制:

© www.soinside.com 2019 - 2024. All rights reserved.