首页 > 解决方案 > 替代不依赖于网络连接的主机名

问题描述

我开发的代码旨在与多台计算机上的文件系统一起运行。数据目录在计算机之间同步,但每台计算机上数据目录的特定位置是唯一的。为了解决这个问题,我设置了一个路径文件,其中路径的开头取决于代码在哪台计算机上运行。我使用该hostname函数确定代码在哪台计算机上运行。

这已经开始导致在我的本地机器上运行代码出现问题,因为输出取决于我连接到的特定网络,如果我在咖啡店使用 wifi,这可能是非常随机的。

是否有替代方法hostname会返回一些标识我正在使用我的本地计算机并且不受我的特定网络连接影响的东西?

标签: bashmacosterminal

解决方案


有多种选择。您可以获得 Mac 的序列号或硬件 UUID(请参阅此问题):

SerialNumber=$(ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}')
HardwareUUID=$(ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformUUID/{print $(NF-1)}')

还有第一个网络接口的硬件地址:

en0MAC=$(ifconfig en0 | awk '$1=="ether" {print $2}')

如果您更喜欢使用在“系统偏好设置”的“共享”面板中设置的计算机名称(或它的 mDNS 兼容版本):

ComputerName=$(scutil --get ComputerName)
LocalHostName=$(scutil --get LocalHostName)

警告:计算机名称可能包含空格和其他奇怪的字符,因此请务必双引号对该变量的任何引用以避免解析问题。


推荐阅读