我有一个运行CoreELEC (类似于LibreELEC的Linux发行版)的电视盒,我希望找到它的IP地址,然后使用SSH登录到它。
我知道以太网接口和Wifi接口的MAC地址。
我想在局域网(以太网或Wifi)中找到我的电视盒的IP地址,前提是我不知道电视盒目前使用哪个接口连接到LAN。
下列目标列表在评估“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))的类似目标也不起作用。
$(TVBOX_IP),确保它们的值首先来自以太网检查,然后来自Wifi检查?发布于 2019-11-24 09:02:07
有时,将逻辑转移到外部命令比较容易。使声明性方法有时很难控制:
考虑另一种选择:将条件移动到shell。
# Notice this is definition, will not force immediate evaluation
TVBOX_ETH_IP= sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_ETH_MAC) | awk '{print $$1}'
TVBOX_WIFI_IP=sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_WLAN_MAC) | awk '{print $$1}'
find-tvbox-ip:
IP=$$(${TVBOX_ETH_IP}) ; [ "$$IP" ] || IP=$$(${TVBOX_WIFI_IP}) ; echo "IP=$$IP"或将条件保持在make $(或.)
TVBOX_ETH_IP=$(shell sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_ETH_MAC) | awk '{print $$1}')
TVBOX_WIFI_IP=$(shell sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_WLAN_MAC) | awk '{print $$1})'
TVBOX_IP=$(or ${TVBOX_ETH_IP}, ${TVBOX_ETH_IP})
find-tvbox-ip:
IP=${TVBOX_IP} ; echo "IP=$$IP"https://stackoverflow.com/questions/59011588
复制相似问题